Mercurial > code
view CMakeLists.txt @ 661:a7ef5d868275
options: use token
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 16 Jul 2019 20:31:36 +0200 |
parents | 87e1f4c7da76 |
children |
line wrap: on
line source
# # CMakeLists.txt -- code building for common code # # Copyright (c) 2013-2019 David Demelier <markand@malikania.fr> # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # cmake_minimum_required(VERSION 3.5) project(code) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED On) if (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") set(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic ${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "-Werror ${CMAKE_CXX_FLAGS_DEBUG}") endif () find_package(Doxygen) find_package(Boost REQUIRED COMPONENTS unit_test_framework) add_subdirectory(extern/libjson) enable_testing() # # code_define_module # ------------------------------------------------------------------- # # code_define_module( # NAME lowercase name # SOURCES source files # LIBRARIES (Optional) libraries # INCLUDES (Optional) include directories # FLAGS (Optional) flags # ) # # Create a test for the given module. # # This macro adds a new option WITH_<uppercase NAME> to test the module. # # If the module has a file test/main.cpp in its directory, a target test-<NAME> is created. # function(code_define_module) set(oneValueArgs NAME) set(multiValueArgs SOURCES LIBRARIES INCLUDES FLAGS) cmake_parse_arguments(MOD "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (NOT MOD_NAME) message(FATAL_ERROR "Argument NAME is not set") endif () # Create the option for enabling the test. string(TOUPPER ${MOD_NAME} optionname) option(WITH_${optionname} "Enable ${MOD_NAME}" On) if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp AND WITH_${optionname}) add_executable(test-${MOD_NAME} ${MOD_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp) set_target_properties( test-${MOD_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} ) target_compile_definitions( test-${MOD_NAME} PRIVATE BOOST_TEST_DYN_LINK ${MOD_FLAGS} ) target_include_directories( test-${MOD_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${MOD_INCLUDES} ) target_link_libraries( test-${MOD_NAME} Boost::dynamic_linking Boost::disable_autolinking Boost::unit_test_framework ${MOD_LIBRARIES} ) # Register the test. add_test( NAME ${MOD_NAME} COMMAND test-${MOD_NAME} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endif () endfunction() if (DOXYGEN_FOUND) set(DOXYGEN_PROJECT_NAME code) set(DOXYGEN_STRIP_FROM_PATH ${code_SOURCE_DIR}/cpp) set(DOXYGEN_FILE_PATTERNS "*.hpp") set(DOXYGEN_WARN_NO_PARAMDOC YES) set(DOXYGEN_WARN_AS_ERROR YES) set(DOXYGEN_QUIET YES) doxygen_add_docs( doxygen ${code_SOURCE_DIR}/cpp WORKING_DIRECTORY ${code_SOURCE_DIR} ) add_custom_target(docs ALL DEPENDS doxygen) endif () add_subdirectory(cpp)