Mercurial > code
view CMakeLists.txt @ 625:dccaf66c8b9f
CMake: get rid of DefineOption
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 23 Oct 2017 15:21:54 +0200 |
parents | ca5912ad2909 |
children | b327391f6a62 |
line wrap: on
line source
# # CMakeLists.txt -- code building for common code # # Copyright (c) 2013-2017 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 14) 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 () # Doxygen target. find_package(Doxygen) find_package(Boost REQUIRED COMPONENTS unit_test_framework) 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}) # Create test executable. 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::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) configure_file( ${CMAKE_SOURCE_DIR}/doxygen/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile ) add_custom_target( doxygen ALL COMMENT "Generating doxygen documentation" COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile WORKING_DIRECTORY ${CMAKE_BINARY_DIR} VERBATIM ) endif () add_subdirectory(cpp)