初始化内容

This commit is contained in:
2026-09-16 14:07:40 +08:00
parent 6934b390bf
commit 4f643c1e7c
18350 changed files with 6088489 additions and 305 deletions
+24
View File
@@ -0,0 +1,24 @@
set(GMM_DIR $ENV{GMM_DIR} CACHE PATH "GMM directory (contain gmm/gmm.h).")
find_path(GMM_INCLUDE_DIR
NAMES gmm/gmm.h
PATHS ${GMM_DIR}
${GMM_DIR}/include
/usr/local/include
/usr/include
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GMM DEFAULT_MSG GMM_INCLUDE_DIR)
if(GMM_FOUND AND NOT TARGET GMM::GMM)
add_library(GMM::GMM INTERFACE IMPORTED)
target_include_directories(GMM::GMM INTERFACE ${GMM_INCLUDE_DIR})
if(MSVC)
target_compile_definitions(GMM::GMM INTERFACE "_SCL_SECURE_NO_DEPRECATE")
endif()
endif()
mark_as_advanced(GMM_INCLUDE_DIR)
+31
View File
@@ -0,0 +1,31 @@
set(GMSH_DIR $ENV{GMSH_DIR} CACHE PATH "GMSH directory (containing include/gmsh.h).")
find_path(GMSH_INCLUDE_DIR
NAMES gmsh.h
HINTS ${GMSH_DIR}
${GMSH_DIR}/include
PATHS /usr/local/include
/usr/include
)
find_library(GMSH_LIBRARY
NAMES gmsh
HINTS ${GMSH_DIR}
${GMSH_DIR}/lib
PATHS /usr/local/lib
/usr/lib
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GMSH DEFAULT_MSG GMSH_INCLUDE_DIR GMSH_LIBRARY)
if(GMSH_FOUND AND NOT TARGET GMSH::GMSH)
add_library(GMSH::GMSH INTERFACE IMPORTED)
target_include_directories(GMSH::GMSH INTERFACE ${GMSH_INCLUDE_DIR})
target_link_libraries(GMSH::GMSH INTERFACE ${GMSH_LIBRARY})
endif()
mark_as_advanced(GMSH_INCLUDE_DIR)
mark_as_advanced(GMSH_LIBRARY)
+131
View File
@@ -0,0 +1,131 @@
# Once done this will define
# Gurobi_FOUND - System has Gurobi
# Targets:
# Gurobi::GurobiC - only the C interface
# Gurobi::GurobiCXX - C and C++ interface
find_path(GUROBI_HOME
NAMES include/gurobi_c++.h
PATHS
$ENV{GUROBI_HOME}
"/opt/gurobi/linux64/"
NO_DEFAULT_PATH # avoid finding /usr
)
find_path(GUROBI_INCLUDE_DIR
NAMES gurobi_c++.h
HINTS
"${GUROBI_HOME}/include"
)
mark_as_advanced(GUROBI_INCLUDE_DIR)
set(GUROBI_BIN_DIR "${GUROBI_HOME}/bin")
set(GUROBI_LIB_DIR "${GUROBI_HOME}/lib")
if (WIN32)
file(GLOB GUROBI_LIBRARY_LIST
RELATIVE ${GUROBI_BIN_DIR}
${GUROBI_BIN_DIR}/gurobi*.dll
)
else()
file(GLOB GUROBI_LIBRARY_LIST
RELATIVE ${GUROBI_LIB_DIR}
${GUROBI_LIB_DIR}/libgurobi*.so
)
endif()
# Ignore libgurobiXY_light.so, libgurobi.so (without version):
string(REGEX MATCHALL
"gurobi([0-9]+)\\..*"
GUROBI_LIBRARY_LIST
"${GUROBI_LIBRARY_LIST}"
)
string(REGEX REPLACE
".*gurobi([0-9]+)\\..*"
"\\1"
GUROBI_LIBRARY_VERSIONS
"${GUROBI_LIBRARY_LIST}")
list(LENGTH GUROBI_LIBRARY_VERSIONS GUROBI_NUMVER)
#message("GUROBI LIB VERSIONS: ${GUROBI_LIBRARY_VERSIONS}")
if (GUROBI_NUMVER EQUAL 0)
message(STATUS "Found no Gurobi library version, GUROBI_HOME = ${GUROBI_HOME}.")
elseif (GUROBI_NUMVER EQUAL 1)
list(GET GUROBI_LIBRARY_VERSIONS 0 GUROBI_LIBRARY_VERSION)
else()
# none or more than one versioned library -let's try without suffix,
# maybe the user added a symlink to the desired library
message(STATUS "Found more than one Gurobi library version (${GUROBI_LIBRARY_VERSIONS}), trying without suffix. Set GUROBI_LIBRARY if you want to pick a certain one.")
set(GUROBI_LIBRARY_VERSION "")
endif()
if (WIN32)
find_library(GUROBI_LIBRARY
NAMES "gurobi${GUROBI_LIBRARY_VERSION}"
PATHS
${GUROBI_BIN_DIR}
)
find_library(GUROBI_IMPLIB
NAMES "gurobi${GUROBI_LIBRARY_VERSION}"
PATHS
${GUROBI_LIB_DIR}
)
mark_as_advanced(GUROBI_IMPLIB)
else ()
find_library(GUROBI_LIBRARY
NAMES "gurobi${GUROBI_LIBRARY_VERSION}"
PATHS
${GUROBI_LIB_DIR}
)
endif()
mark_as_advanced(GUROBI_LIBRARY)
if(GUROBI_LIBRARY AND NOT TARGET Gurobi::GurobiC)
add_library(Gurobi::GurobiC SHARED IMPORTED)
target_include_directories(Gurobi::GurobiC INTERFACE ${GUROBI_INCLUDE_DIR})
set_target_properties(Gurobi::GurobiC PROPERTIES IMPORTED_LOCATION ${GUROBI_LIBRARY})
if (GUROBI_IMPLIB)
set_target_properties(Gurobi::GurobiC PROPERTIES IMPORTED_IMPLIB ${GUROBI_IMPLIB})
endif()
endif()
# Gurobi ships with some compiled versions of its C++ library for specific
# compilers, however it also comes with the source code. We will compile
# the source code outselves -- this is much safer, as it guarantees the same
# compiler version and flags.
# (Note: doing this is motivated by actual sometimes-subtle ABI compatibility bugs)
find_path(GUROBI_SRC_DIR NAMES "Model.h" PATHS "${GUROBI_HOME}/src/cpp/")
mark_as_advanced(GUROBI_SRC_DIR)
file(GLOB GUROBI_CXX_SRC CONFIGURE_DEPENDS ${GUROBI_SRC_DIR}/*.cpp)
if(TARGET Gurobi::GurobiC AND GUROBI_CXX_SRC AND NOT TARGET Gurobi::GurobiCXX)
add_library(GurobiCXX STATIC EXCLUDE_FROM_ALL ${GUROBI_CXX_SRC})
add_library(Gurobi::GurobiCXX ALIAS GurobiCXX)
target_compile_options(GurobiCXX
PRIVATE
$<$<CXX_COMPILER_ID:GNU>:-Wno-deprecated-copy>
$<$<CXX_COMPILER_ID:Clang>:-Wno-deprecated-copy>
)
if(MSVC)
target_compile_definitions(GurobiCXX PRIVATE "WIN64")
endif()
target_include_directories(GurobiCXX PUBLIC ${GUROBI_INCLUDE_DIR})
target_link_libraries(GurobiCXX PUBLIC Gurobi::GurobiC)
# We need to be able to link this into a shared library:
set_target_properties(GurobiCXX PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()
# legacy support:
set(GUROBI_INCLUDE_DIRS "${GUROBI_INCLUDE_DIR}")
set(GUROBI_LIBRARIES Gurobi::GurobiC Gurobi::GurobiCXX)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Gurobi DEFAULT_MSG GUROBI_LIBRARY GUROBI_INCLUDE_DIR GUROBI_SRC_DIR)
+40
View File
@@ -0,0 +1,40 @@
set(CMAKE_FIND_DEBUG_MODE TRUE)
set(LPSOLVE_DIR $ENV{LPSOLVE_DIR} CACHE PATH "lpsolve directory (contain include/lp_lib.h).")
find_path(LPSOLVE_INCLUDE_DIR
NAMES lp_lib.h
PATHS ${LPSOLVE_DIR}
${LPSOLVE_DIR}/include
/usr/local/include
/usr/include
${VS_SEARCH_PATH}/lpsolve-5.5.2.11/include
~/sw/lpsolve-5.5.2.11/include
)
find_library(LPSOLVE_LIBRARY
NAMES lpsolve55
HINTS ${LPSOLVE_DIR}
${LPSOLVE_DIR}/lib
${VS_SEARCH_PATH}/lpsolve-5.5.2.11/lib
~/sw/lpsolve-5.5.2.11/lib
PATHS /usr/local/lib
/usr/lib
)
get_filename_component(LPSOLVE_LIBRARY_DIR ${LPSOLVE_LIBRARY} DIRECTORY CACHE)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LPSOLVE DEFAULT_MSG LPSOLVE_INCLUDE_DIR LPSOLVE_LIBRARY LPSOLVE_LIBRARY_DIR)
if(LPSOLVE_FOUND AND NOT TARGET lpsolve::lpsolve)
add_library(lpsolve::lpsolve INTERFACE IMPORTED)
target_include_directories(lpsolve::lpsolve INTERFACE ${LPSOLVE_INCLUDE_DIR})
target_link_directories(lpsolve::lpsolve INTERFACE ${LPSOLVE_LIBRARY_DIR})
target_link_libraries(lpsolve::lpsolve INTERFACE ${LPSOLVE_LIBRARY})
endif()
mark_as_advanced(LPSOLVE_INCLUDE_DIR)
mark_as_advanced(LPSOLVE_LIBRARY)
set(CMAKE_FIND_DEBUG_MODE FALSE)
+79
View File
@@ -0,0 +1,79 @@
# Once done this will (on success) define the following targets:
# Mosek::MosekC - only the C interface
# Mosek::FusionCXX - C and C++ interface
# The enviroment variable MOSEK_DIR can be used to initialize MOSEK_BASE
# Tested with Mosek 9.2 on Linux
find_path (MOSEK_BASE
NAMES tools/platform
HINTS $ENV{MOSEK_DIR}
PATHS
/opt/mosek/9.2
/opt/mosek/9.3
$ENV{MOSEK_DIR}
DOC "Base path of your Mosek installation, e.g. /opt/mosek/9.2")
if (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
set(DEFAULT_MOSEK_PLATFORM "win64x86")
elseif (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Darwin")
set(DEFAULT_MOSEK_PLATFORM "osx64x86")
elseif (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Linux")
set(DEFAULT_MOSEK_PLATFORM "linux64x86")
else()
set(DEFAULT_MOSEK_PLATFORM "unknown")
endif()
set (MOSEK_PLATFORM "${DEFAULT_MOSEK_PLATFORM}" CACHE STRING "mosek platform, e.g. linux64x86 or osx64x86")
mark_as_advanced(MOSEK_PLATFORM)
set (MOSEK_PLATFORM_PATH "${MOSEK_BASE}/tools/platform/${MOSEK_PLATFORM}")
find_path (MOSEK_INCLUDE_DIR
NAMES mosek.h
PATHS "${MOSEK_PLATFORM_PATH}/h"
)
find_path (MOSEK_LIBRARY_DIR
NAMES libmosek64.dylib
libmosek64.so
mosek64_9_2.dll # TODO: multi-version detection?
PATHS "${MOSEK_PLATFORM_PATH}/bin")
find_library (MOSEK_LIBRARY
NAMES mosek64
PATHS "${MOSEK_LIBRARY_DIR}")
if(MOSEK_LIBRARY AND NOT TARGET Mosek::MosekC)
add_library(Mosek::MosekC STATIC IMPORTED)
target_include_directories(Mosek::MosekC INTERFACE ${MOSEK_INCLUDE_DIR})
set_target_properties(Mosek::MosekC PROPERTIES IMPORTED_LOCATION ${MOSEK_LIBRARY})
endif()
find_path(MOSEK_SRC_DIR NAMES "SolverInfo.cc" PATHS "${MOSEK_PLATFORM_PATH}/src/fusion_cxx/")
if(MOSEK_LIBRARY AND MOSEK_SRC_DIR AND NOT TARGET Mosek::FusionCXX)
add_library(FusionCXX EXCLUDE_FROM_ALL
"${MOSEK_SRC_DIR}/BaseModel.cc"
"${MOSEK_SRC_DIR}/Debug.cc"
"${MOSEK_SRC_DIR}/IntMap.cc"
"${MOSEK_SRC_DIR}/SolverInfo.cc"
"${MOSEK_SRC_DIR}/StringBuffer.cc"
"${MOSEK_SRC_DIR}/mosektask.cc"
"${MOSEK_SRC_DIR}/fusion.cc")
target_link_libraries(FusionCXX PUBLIC Mosek::MosekC)
set_target_properties(FusionCXX PROPERTIES POSITION_INDEPENDENT_CODE ON)
target_compile_features(FusionCXX INTERFACE cxx_std_11)
target_include_directories(FusionCXX PUBLIC ${MOSEK_SRC_DIR})
add_library(Mosek::FusionCXX ALIAS FusionCXX)
endif()
# legacy support:
set(MOSEK_INCLUDE_DIRS ${MOSEK_INCLUDE_DIR})
set(MOSEK_LIBRARIES Mosek::MosekC Mosek::FusionCXX)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Mosek DEFAULT_MSG MOSEK_LIBRARY MOSEK_INCLUDE_DIR)