CMake设置选项只在一个CMakeLists中打开
实际上,我为每个“模块”使用了不同CMakeLists的项目:一个用于编译,另一个用于单元测试(使用goole测试)。我有一个这样的结构:CMake设置选项只在一个CMakeLists中打开
module_1
- | SRC
--CMakeLists.txt //对模块的编译1
--test
---- |的CMakeLists.txt //对于模块1的单元测试
module_2
- | SRC
--CMakeLists.txt //用于模块的编译2
--test
---- | CMakeLists //用于单元测试模块2
现在,我的目标是为每个模块创建一个CMakeLists.txt,并在同一个CMakeLists.txt中进行编译和单元测试。所以我在触发测试的CMakeLists.txt(用于编译)中创建一个OPTION。
option(TEST_ENABLED
"Tests Unitaires Core"
OFF
)
if(TEST_ENABLED)
set...
endif()
这对一个CMakeLists来说很好。但是,如果我构建了所有模块,则为每个模块激活该选项(我希望你跟着我)。
cmake -DTEST_ENABLED=ON -G"Unix Makefiles" ../module1
我触发编译与服务器(詹金斯)与一些$variables
所以我想激活仅针对主CMakeLists的选项(谁在调用cmake的命令行中的一个)
我该怎么办那?
如果您想了解更多信息,请告诉我在advnace
感谢您的帮助。
关于测试,我喜欢的方式是能测试有两个条件:
- 可变
TEST_ENABLED
是ON
- 当前项目是CMake的
主要项目中的第二个条件可以被测试与PROJECT_NAME
和CMAKE_PROJECT_NAME
来源:https://stackoverflow.com/a/8587949/1380225
样品:
if(TEST_ENABLED AND ("${PROJECT_NAME}" STREQUAL "${CMAKE_PROJECT_NAME}"))
...
endif()
选项和其他用户提供的参数是为项目设置的全局参数,因此它们会影响其所有部分。
您可以使用您的不同部位不同选项工程:
模块1 /的CMakeLists.txt:
option(TEST1_ENABLED
"Test for module 1"
OFF
)
...
另外,在测试的情况下,你可以使用单用户提供的参数枚举所有模块,选项应设置为:
CMakeLists.txt :
set(TESTS_LIST "" CACHE STRING "List of tests")
模块1 /的CMakeLists.txt:
list(module_index FIND "module1" ${TESTS_LIST})
if(module_index EQUAL -1)
set(TEST_ENABLED OFF) # No CACHE, so variable is local for the module1.
else()
set(TEST_ENABLED ON)
endif()
if(TEST_ENABLED)
...
endif()
可能的用法:
cmake "-DTESTS_LIST=module1;module3" -G "Unix Makefiles" ..
这将启用module1
和module3
测试,而不是module2
。
这是伟大的工作。谢谢 – Algorys