diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b53ad3915..662dc1b4b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,7 @@ include(utils) set_version(VERSION) project(ortools VERSION ${VERSION} LANGUAGES CXX) +set(PROJECT_NAMESPACE ortools) message(STATUS "${PROJECT_NAME} version: ${PROJECT_VERSION}") #message(STATUS "major: ${PROJECT_VERSION_MAJOR}") #message(STATUS "minor: ${PROJECT_VERSION_MINOR}") @@ -48,11 +49,34 @@ if(NOT CMAKE_BUILD_TYPE) FORCE) endif() +# Layout build dir like install dir +include(GNUInstallDirs) if(UNIX) - option(BUILD_SHARED_LIBS "Build shared libraries(.so)." ON) -elseif(MSVC) - # Windows only support static build. + option(BUILD_SHARED_LIBS "Build shared libraries(.so or .dyld)." ON) + set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) + # for multi-config build system (e.g. xcode) + foreach(OUTPUTCONFIG IN LISTS CMAKE_CONFIGURATION_TYPES) + string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${OUTPUTCONFIG}/${CMAKE_INSTALL_LIBDIR}) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${OUTPUTCONFIG}/${CMAKE_INSTALL_LIBDIR}) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${OUTPUTCONFIG}/${CMAKE_INSTALL_BINDIR}) + endforeach() +else() + # Currently Only support static build for windows set(BUILD_SHARED_LIBS OFF) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) + # for multi-config builds (e.g. msvc) + foreach(OUTPUTCONFIG IN LISTS CMAKE_CONFIGURATION_TYPES) + string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${OUTPUTCONFIG}/${CMAKE_INSTALL_BINDIR}) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${OUTPUTCONFIG}/${CMAKE_INSTALL_BINDIR}) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${OUTPUTCONFIG}/${CMAKE_INSTALL_BINDIR}) + endforeach() endif() # By default only build the C++ library. @@ -66,6 +90,11 @@ message(STATUS "Build Java: ${BUILD_JAVA}") option(BUILD_DOTNET "Build .NET Library" OFF) message(STATUS "Build .Net: ${BUILD_DOTNET}") +# If wrapper are built, we need to have the install rpath in BINARY_DIR to package +if(BUILD_PYTHON OR BUILD_JAVA OR BUILD_DOTNET) + set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +endif() + option(BUILD_EXAMPLES "Build examples" ON) message(STATUS "Build examples: ${BUILD_EXAMPLES}") diff --git a/cmake/cpp.cmake b/cmake/cpp.cmake index de781bad90..1b9cf667b3 100644 --- a/cmake/cpp.cmake +++ b/cmake/cpp.cmake @@ -110,11 +110,6 @@ if(USE_XPRESS) set(XPRESS_DEP XPRESS::XPRESS) endif() -# If wrapper are built, we need to have the install rpath in BINARY_DIR to package -if(BUILD_PYTHON OR BUILD_JAVA OR BUILD_DOTNET) - set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) -endif() - # Main Target add_library(${PROJECT_NAME} "") # Xcode fails to build if library doesn't contains at least one source file.