我认为可能的解决方案强烈取决于使用情况。例如,如果这是在系统构建后执行测试,则应使用
CTest
而不是直接调用
make
。
您需要添加以下内容到您的CMakeLists.txt文件中:
add_test(NAME foo COMMAND ...)
然后使用
CTest
进行构建和执行:
ctest --build-and-test ...
更加普遍地说,不考虑为什么要这样做的问题 - 我认为最好的方法是只命名并依赖于具体的目标依赖项,而不是仅仅使用所有目标 - 我只想添加两种可能来实现你想要做的事情。
其中一种方法是确定/跟踪讨论
此处使用的所有目标列表。对于库目标,它将像这样查找(获取您自己/私有的
GlobalTargetList
):
macro(add_library _target)
_add_library(${_target} ${ARGN})
set_property(GLOBAL APPEND PROPERTY GlobalTargetList ${_target})
endmacro()
并在您的主要CMakeLists.txt文件末尾使用它
get_property(_allTargets GLOBAL PROPERTY GlobalTargetList)
add_dependencies(foo ${_allTargets})
编辑:CMake 3.7发布了全局BUILDSYSTEM_TARGETS
属性。
第二种方法(不太理想)要求foo
目标不是ALL
构建的一部分(否则会陷入无限循环):
add_custom_target(foo)
set_target_properties(foo PROPERTIES EXCLUDE_FROM_ALL 1)
add_custom_command(
TARGET foo
PRE_BUILD
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target ALL_BUILD --config $<CONFIGURATION>
)