cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(promise) # # coverage mode # option(PROMISE_BUILD_WITH_COVERAGE "Build with coverage" OFF) if(PROMISE_BUILD_WITH_COVERAGE AND (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")) add_definitions(-DPROMISE_BUILD_WITH_COVERAGE) set(PROMISE_COVERAGE_FLAGS "--coverage") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${PROMISE_COVERAGE_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${PROMISE_COVERAGE_FLAGS}") set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} ${PROMISE_COVERAGE_FLAGS}") endif() # # sanitizer mode # option(PROMISE_BUILD_WITH_SANITIZER "Build with sanitizer" OFF) if(PROMISE_BUILD_WITH_SANITIZER AND (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")) add_definitions(-DPROMISE_BUILD_WITH_SANITIZER) set(PROMISE_SANITIZER_FLAGS "-fno-omit-frame-pointer -fsanitize=address") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${PROMISE_SANITIZER_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${PROMISE_SANITIZER_FLAGS}") set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} ${PROMISE_SANITIZER_FLAGS}") endif() # # tests executable # find_package(Threads REQUIRED) file(GLOB test_sources "*.cpp" "*.hpp") add_executable(${PROJECT_NAME} ${test_sources}) if(MSVC) target_compile_options(${PROJECT_NAME} PRIVATE /bigobj) endif(MSVC) target_link_libraries(${PROJECT_NAME} Threads::Threads) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 14 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO) enable_testing() add_test(${PROJECT_NAME} ${PROJECT_NAME})