CMake的默认构建目标的名称是什么?

我有一个自定义目标,我希望它依赖于默认目标(使用make构建的目标)。

 add_custom_target(foo ....) add_dependency(foo default_target_name_goes_here) 

默认目标的名称是什么?

我试过ALLALL_BUILDMyProjectsNameDEFAULT ,……

在CMake文档中查找任何内容总是不成功的冒险……

更新:似乎CMake的设计方式非常难以修复/实现: 自2009年以来bugreport获得+ 1 。 谁的确想拥有一个依赖于all目标的自定义目标? 或换句话说:谁曾写过make && make test ?…

在CMake配置时,默认构建目标不作为CMake目标存在。 它仅存在于生成的构建系统中。 因此,无法使默认目标依赖于自定义目标。

我认为可能的解决方案很大程度上取决于用例。 例如,如果这是在系统构建之后执行测试,那么您将使用CTest而不是直接调用make

要添加到您的CMakeLists.txt:

  add_test(NAME foo COMMAND ...) 

然后使用CTest构建和执行:

  ctest --build-and-test ... 

更一般地说,并没有考虑为什么你想这样做的问题 – 我认为最好的事情是只是命名和依赖具体的目标依赖,而不是仅仅采取ALL目标 – 我只是想添加两个可能性来做什么你想做。

一种是确定/跟踪这里讨论的所有目标的列表。 这将看起来像这样的库目标(获得自己的/私有的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}) 

编辑:全局BUILDSYSTEM_TARGETS属性随CMake 3.7一起发布

第二个 – 不太有利 – 的方法确实要求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 $ )