486
|
1 function(code_define_module) |
|
2 set(options NO_TEST) |
|
3 set(oneValueArgs NAME) |
|
4 set(multiValueArgs SOURCES RESOURCES LIBRARIES INCLUDES FLAGS) |
|
5 |
|
6 cmake_parse_arguments(MOD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
|
7 |
|
8 if (NOT MOD_NAME) |
|
9 message(FATAL_ERROR "Argument NAME is not set") |
|
10 endif () |
|
11 |
|
12 string(TOUPPER ${MOD_NAME} optionname) |
|
13 |
|
14 # Tests are optional |
|
15 if (NOT ${MOD_NO_TEST}) |
|
16 # Create the option for enabling the test |
|
17 option(WITH_${optionname} "Enable ${MOD_NAME}" On) |
|
18 |
|
19 if (WITH_${optionname}) |
|
20 # Add the test executable |
|
21 set(MAIN ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp) |
|
22 |
|
23 if (NOT EXISTS ${MAIN}) |
|
24 message(FATAL_ERROR "${MAIN} file does not exists") |
|
25 endif () |
|
26 |
|
27 # |
|
28 # Copy optional resources in the ${CMAKE_BINARY_DIR}/${MOD_NAME} directory. |
|
29 # |
|
30 if (MOD_RESOURCES) |
|
31 foreach (res ${MOD_RESOURCES}) |
|
32 get_filename_component(inputname ${res} NAME) |
|
33 set(output ${CMAKE_BINARY_DIR}/${MOD_NAME}/${inputname}) |
|
34 |
|
35 add_custom_command( |
|
36 OUTPUT ${output} |
|
37 COMMENT "Copying ${inputname}" |
|
38 DEPENDS ${res} |
|
39 COMMAND ${CMAKE_COMMAND} -E copy ${res} ${output} |
|
40 ) |
|
41 |
|
42 list(APPEND ${MOD_SOURCES} ${output}) |
|
43 endforeach() |
|
44 endif () |
|
45 |
|
46 # |
|
47 # Finally create the executable and the test |
|
48 # |
|
49 add_executable(${MOD_NAME} ${MOD_SOURCES} ${MOD_RESOURCES} ${MAIN}) |
|
50 |
|
51 add_test( |
|
52 NAME ${MOD_NAME}-test |
|
53 COMMAND ${MOD_NAME} |
|
54 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
|
55 ) |
|
56 |
|
57 target_compile_definitions(${MOD_NAME} PRIVATE ${MOD_FLAGS}) |
|
58 target_include_directories( |
|
59 ${MOD_NAME} |
|
60 PRIVATE |
|
61 ${CMAKE_CURRENT_SOURCE_DIR} |
|
62 ${MOD_INCLUDES} |
|
63 ) |
|
64 target_link_libraries(${MOD_NAME} gtest ${MOD_LIBRARIES}) |
|
65 endif () |
|
66 endif () |
|
67 endfunction() |