| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- cmake_minimum_required(VERSION 3.10)
- project(Cbox)
- # define options
- option(ASAN "Enable AddressSanitizer" OFF)
- option(COVERAGE "Enable code coverage" OFF)
- option(STRICT_ERROR "Treats all compiler warnings as errors." OFF)
- option(CI_BUILD "Configure GitHub CI compilation." OFF)
- # basic configuration
- set(CMAKE_CXX_STANDARD 11)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
- set_property(GLOBAL PROPERTY USE_FOLDERS ON)
- if (NOT CI_BUILD)
- configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
- execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
- RESULT_VARIABLE result
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
- if(result)
- message(FATAL_ERROR "CMake step for googletest failed: ${result}")
- endif()
- execute_process(COMMAND ${CMAKE_COMMAND} --build .
- RESULT_VARIABLE result
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
- if(result)
- message(FATAL_ERROR "Build step for googletest failed: ${result}")
- endif()
- # Prevent overriding the parent project's compiler/linker
- # settings on Windows
- set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
- # Add googletest directly to our build. This defines
- # the gtest and gtest_main targets.
- add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src
- ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
- EXCLUDE_FROM_ALL)
- # The gtest/gtest_main targets carry header search path
- # dependencies automatically when using CMake 2.8.11 or
- # later. Otherwise we have to add them here ourselves.
- if (CMAKE_VERSION VERSION_LESS 2.8.11)
- include_directories("${gtest_SOURCE_DIR}/include")
- endif()
- endif()
- if (STRICT_ERROR)
- if (MSVC)
- add_compile_options("/WX")
- else ()
- add_compile_options("-Werror")
- endif ()
- endif ()
- if (ASAN)
- message(STATUS "Enable AddressSanitizer.")
- if (MSVC)
- add_compile_options("/fsanitize=address")
- else ()
- add_compile_options("-fno-omit-frame-pointer" "-fsanitize=address" "-fsanitize=undefined")
- add_link_options("-fno-omit-frame-pointer" "-fsanitize=address" "-fsanitize=undefined")
- endif ()
- endif ()
- if (COVERAGE)
- message(STATUS "Enable code coverage.")
- if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
- add_compile_options("-fprofile-instr-generate" "-fcoverage-mapping")
- add_link_options("-fprofile-instr-generate" "-fcoverage-mapping")
- elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
- add_compile_options("--coverage")
- add_link_options("--coverage")
- else ()
- message(FATAL_ERROR "${CMAKE_CXX_COMPILER_ID} does not support coverage analysis.")
- endif ()
- endif ()
- # compiler options
- if (MSVC)
- add_compile_options("/MP")
- endif ()
- if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
- add_compile_options("-Wall" "-Wextra")
- endif ()
- # build target
- add_executable (Cbox-test)
- # add include path
- include_directories(include)
- # add source file
- add_subdirectory(src)
- add_subdirectory(test)
- if (CI_BUILD)
- # Now simply link against gtest_main or gtest_main as needed.
- TARGET_LINK_LIBRARIES(Cbox-test gtest pthread)
- else ()
- TARGET_LINK_LIBRARIES(Cbox-test gtest_main)
- endif ()
- enable_testing()
|