初始化内容
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user