cmake目标行为取决于源内调用与源外调用

cmake目标行为取决于源内调用与源外调用,cmake,Cmake,在我的项目中,我有大量的测试可执行文件,我只想在被请求时构建它们,也就是说,“make tests”应该在没有参数的“make”不能创建它们的地方创建它们 在我的顶级CMakeLists.txt中,我有 add_custom_target(tests) set (TEST_APP_LIST foo bar) foreach (TEST_APP ${TEST_APP_LIST}) add_executable(${TEST_APP} EXCLUDE_FROM_ALL ${TEST_APP

在我的项目中,我有大量的测试可执行文件,我只想在被请求时构建它们,也就是说,“make tests”应该在没有参数的“make”不能创建它们的地方创建它们

在我的顶级CMakeLists.txt中,我有

add_custom_target(tests)
set (TEST_APP_LIST foo bar)
foreach (TEST_APP ${TEST_APP_LIST})
    add_executable(${TEST_APP} EXCLUDE_FROM_ALL ${TEST_APP}.cpp)
    target_link_libraries(${TEST_APP} ${MY_LIBS})
    add_dependencies(tests ${TEST_APP})
endforeach(TEST_APP)
在我的子目录CMakeLists.txt中,我有

add_custom_target(tests)
set (TEST_APP_LIST foo bar)
foreach (TEST_APP ${TEST_APP_LIST})
    add_executable(${TEST_APP} EXCLUDE_FROM_ALL ${TEST_APP}.cpp)
    target_link_libraries(${TEST_APP} ${MY_LIBS})
    add_dependencies(tests ${TEST_APP})
endforeach(TEST_APP)
关键是:当我进行源代码外构建时,这很好,但是如果我进行源代码内构建,即使我没有指定要生成测试目标,测试目标也会生成。我希望在这两种情况下都能显式地请求测试目标

说“好吧,不要做源代码构建,因为它们是邪恶的”,这很有诱惑力,这是公平的,但目前,我需要在一段时间内支持这两种方法

这是使用cmake 2.6版