C++ CMake:防止在子目录库项目中构建测试可执行目标

C++ CMake:防止在子目录库项目中构建测试可执行目标,c++,testing,cmake,subdirectory,doctest,C++,Testing,Cmake,Subdirectory,Doctest,我编写了一个使用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

我编写了一个使用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)

...
。。。
添加库(我的库静态${SRCS}$)
添加_可执行文件(tests${SRCS}$)
目标编译定义(my_lib PRIVATE-DDOCTEST_CONFIG_DISABLE)
...
当通过
add_子目录
在项目中使用库时,库和测试可执行文件是在我只需要库时构建的

在将CMakeLists.txt作为子目录包含时,如何防止生成测试,或者是否有更好的方法来实现类似的结果

我正在使用忍者来建立这个项目


我可以使用
ninja-t目标检查目标,并从命令行中只构建我想要的目标,但是我可以让CMake从
all
target中排除子目录中的测试吗?

如果我理解正确,这正是CMake属性所做的。它可以用作目标属性(如果只想排除该目标),也可以用作目录属性以排除子目录中的所有目标。要为目标设置此属性,请执行以下操作:

set_target_properties(tests PROPERTIES EXCLUDE_FROM_ALL True)

除了Pedro的回答之外,当在父项目中包含子目录时,CMake允许我们设置EXCLUDE_FROM_ALL:

add_subdirectory(my_lib my_lib-build EXCLUDE_FROM_ALL)
。。。重要的是,不排除任何依赖项:

请注意,目标间依赖关系将取代此排除。如果父项目生成的目标依赖于子目录中的目标,则dependee目标将包含在父项目生成系统中以满足依赖关系


为了防止生成测试,请让生成系统只生成库目标。拥有多个目标的意义在于,您可以独立地构建它们。您不必总是构建“全部”或“安装”。谢谢,我会在问题中添加信息,看看是否可以在此基础上进行扩展。