Mercurial > code
view cmake/CodeDefineModule.cmake @ 541:218545c3c560
Sockets: rename AddressIterator -> Iterator
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 13 Jun 2016 14:07:31 +0200 |
parents | cc50a80dc163 |
children | f48bb09bccc7 |
line wrap: on
line source
# # CMakeLists.txt -- code building for common code # # Copyright (c) 2013-2016 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. # # # 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. # include(CMakeParseArguments) 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 ${MOD_FLAGS}) target_include_directories( test-${MOD_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${MOD_INCLUDES} ) target_link_libraries(test-${MOD_NAME} gtest ${MOD_LIBRARIES}) # Register the test. add_test( NAME ${MOD_NAME} COMMAND test-${MOD_NAME} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endif () endfunction()