我已经编写了一个使用doctest的小型库。在CMakeLists.txt中,我有:
...
add_library(my_lib STATIC ${SRCS} $<TARGET_OBJECTS:common_files>)
add_executable(tests ${SRCS} $<TARGET_OBJECTS:common_files>)
target_compile_definitions(my_lib PRIVATE -DDOCTEST_CONFIG_DISABLE)
...
通过add_subdirectory
在项目中使用该库时,仅在需要该库时才构建该库和测试可执行文件。
当将CMakeLists.txt作为子目录包括在内时,我该怎么做以防止构建测试,或者有更好的方法来获得类似的结果?
我正在使用Ninja来构建项目。
我可以使用ninja -t targets
检查目标,并仅从命令行构建所需的目标,但是我可以让CMake从all
目标中排除子目录中的测试吗?
答案 0 :(得分:1)
如果我对您的理解正确,那么这正是CMake属性EXCLUDE_FROM_ALL的作用。它可以用作目标属性(如果要仅排除该目标),也可以用作目录属性以排除子目录中的所有目标。要为您的目标设置此属性:
set_target_properties(tests PROPERTIES EXCLUDE_FROM_ALL True)
答案 1 :(得分:0)
除了Pedro的答案,CMake还允许我们在父项目中包含子目录时设置EXCLUDE_FROM_ALL:
add_subdirectory(my_lib my_lib-build EXCLUDE_FROM_ALL)
...重要的是不排除任何依赖性:
请注意,目标间的依存关系取代了此排除项。如果父项目构建的目标依赖于子目录中的目标,则被依赖者目标将包含在父项目构建系统中,以满足相关性。