mirror of
https://github.com/nlohmann/json.git
synced 2024-11-24 06:29:03 +08:00
59 lines
1.9 KiB
CMake
59 lines
1.9 KiB
CMake
cmake_minimum_required(VERSION 2.8.4)
|
|
project(json)
|
|
|
|
# Enable C++11 and set flags for coverage testing
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -O0 --coverage -fprofile-arcs -ftest-coverage")
|
|
|
|
# If not specified, use Debug as build type (necessary for coverage testing)
|
|
if( NOT CMAKE_BUILD_TYPE )
|
|
set( CMAKE_BUILD_TYPE Debug CACHE STRING
|
|
""
|
|
FORCE )
|
|
endif()
|
|
|
|
# CMake addons for lcov
|
|
# Only possible with g++ at the moment. We run otherwise just the test
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage")
|
|
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
|
|
include(CodeCoverage)
|
|
|
|
setup_coverage(coverage)
|
|
endif()
|
|
|
|
# Normal sources
|
|
include_directories(src/)
|
|
aux_source_directory(src/ json_list)
|
|
add_library(json ${json_list})
|
|
|
|
# Testing
|
|
enable_testing()
|
|
|
|
# Search all test files in the test directory with a .cc suffix
|
|
file(GLOB TEST_FILES "test/*.cc")
|
|
foreach(TEST_FILE ${TEST_FILES})
|
|
# We use the basename to identify the test. E.g "json_unit" for "json_unit.cc"
|
|
get_filename_component(BASENAME ${TEST_FILE} NAME_WE)
|
|
# Create a test executable
|
|
add_executable(${BASENAME} ${TEST_FILE})
|
|
# Link it with our main json file
|
|
target_link_libraries(${BASENAME} json)
|
|
|
|
# Add test if people want to use ctest
|
|
add_test(${BASENAME} ${BASENAME})
|
|
|
|
# If we are using g++, we also need to setup the commands for coverage
|
|
# testing
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
# Add a run_XXX target that runs the executable and produces the
|
|
# coverage data automatically
|
|
add_custom_target(run_${BASENAME} COMMAND ./${BASENAME})
|
|
# Make sure that running requires the executable to be build
|
|
add_dependencies (run_${BASENAME} ${BASENAME})
|
|
# To create a valid coverage report, the executable has to be
|
|
# executed first
|
|
add_dependencies (coverage run_${BASENAME})
|
|
endif()
|
|
endforeach()
|
|
|