86 lines
3.6 KiB
CMake
86 lines
3.6 KiB
CMake
# This file is just an orchestration
|
|
cmake_minimum_required(VERSION 3.18)
|
|
|
|
option(CMAKE_EXPORT_COMPILE_COMMANDS "Export compile command" OFF)
|
|
|
|
project(@CPP_NAME@ VERSION 1.0 LANGUAGES CXX)
|
|
message(STATUS "${PROJECT_NAME} version: ${PROJECT_VERSION}")
|
|
#message(STATUS "major: ${PROJECT_VERSION_MAJOR}")
|
|
#message(STATUS "minor: ${PROJECT_VERSION_MINOR}")
|
|
#message(STATUS "patch: ${PROJECT_VERSION_PATCH}")
|
|
|
|
if(MSVC)
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
else()
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
endif()
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH True)
|
|
|
|
# Default Build Type to be Release
|
|
get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
if(isMultiConfig)
|
|
if(NOT CMAKE_CONFIGURATION_TYPES)
|
|
set(CMAKE_CONFIGURATION_TYPES "Release;Debug" CACHE STRING
|
|
"Choose the type of builds, options are: Debug Release RelWithDebInfo MinSizeRel. (default: Release;Debug)"
|
|
FORCE)
|
|
endif()
|
|
message(STATUS "Configuration types: ${CMAKE_CONFIGURATION_TYPES}")
|
|
else()
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
|
|
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel. (default: Release)"
|
|
FORCE)
|
|
endif()
|
|
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
endif()
|
|
|
|
# Layout build dir like install dir
|
|
include(GNUInstallDirs)
|
|
if(UNIX)
|
|
option(BUILD_SHARED_LIBS "Build shared libraries (.so or .dylib)." 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, Ninja Multi-Config)
|
|
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()
|
|
option(BUILD_SHARED_LIBS "Build shared libraries (.dll)." ON)
|
|
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()
|
|
|
|
find_package(ortools REQUIRED CONFIG)
|
|
|
|
add_executable(${PROJECT_NAME} @CPP_FILE_NAME@)
|
|
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
|
target_compile_features(${PROJECT_NAME} PUBLIC
|
|
$<IF:$<CXX_COMPILER_ID:MSVC>,cxx_std_20,cxx_std_17>)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE ortools::ortools)
|
|
|
|
# Disable CTest targets
|
|
set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1)
|
|
include(CTest)
|
|
if(BUILD_TESTING)
|
|
add_test(NAME test_${PROJECT_NAME} COMMAND ${PROJECT_NAME} @TEST_ARGS@)
|
|
endif()
|
|
|
|
# Install rules
|
|
include(GNUInstallDirs)
|
|
install(TARGETS ${PROJECT_NAME})
|