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

x33g5p2x  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(132)

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

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

字符串
默认目标的名称是什么?
我试过ALLALL_BUILDMyProjectsNameDEFAULT...
在CMake文档中查找任何内容总是一次不成功的冒险...
最新消息:看起来CMake是以这样一种方式设计的,这是非常难以修复/实现的:bugreport getting +1's since 2009。谁真的希望有一个依赖于,例如,all目标的自定义目标?或者换句话说:谁曾经写过make && make test?...

31moq8wy

31moq8wy1#

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

ccrfmcuu

ccrfmcuu2#

我认为一个可能的解决方案在很大程度上取决于用例。例如,如果这是为了在系统构建后执行测试,你应该使用CTest而不是直接调用make
在您的CMakeLists.txt中,您可以添加:

add_test(NAME foo COMMAND ...)

字符串
然后使用CTest构建并执行:

ctest --build-and-test ...


更一般地说,不考虑为什么要这样做的问题-我认为最好的方法是命名并依赖于具体的目标依赖关系,而不仅仅是采用ALL目标-我只想添加两种可能性来完成您想要做的事情。
一种方法是确定/跟踪所讨论的here使用的所有目标的列表。这将查找例如像这样的库目标(获取您自己的/私有的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 $<CONFIGURATION>
)

相关问题