gpt4 book ai didi

CMake add_custom_target 取决于正在构建的整个项目

转载 作者:行者123 更新时间:2023-12-04 06:09:34 24 4
gpt4 key购买 nike

我想添加一个测试目标,该目标依赖于正在成功构建的整个项目,而无需重新指定对所有库或可执行文件的依赖关系。

我会在 make 中这样写:

all: foo bar

foo: ...
bar: ...

test: all
test.sh

test.sh 隐式使用 foo 和 bar 并希望它们是最新的。

这就是我希望在 cmake 中指定它的方式。
add_library(foo ...)
add_executable(bar ...)

add_custom_target(test test.sh
DEPENDS all
)

但是,这不起作用,因为没有所有目标。

有没有办法指定这个?或者是否有一个变量可以扩展到我尝试构建的所有目标?

最佳答案

从 2.8 版开始,CMake 不提供包含所有目标列表的变量。您能做的最好的事情就是覆盖内置命令 add_libraryadd_executable使用自定义宏调用内置宏并跟踪变量中所有定义的目标。

您甚至可以为自定义宏使用相同的名称。这样您就不必对所有现有的 add_library 进行更改。和 add_executable调用。如果您覆盖其中任何一个,原始的内置命令会以下划线为前缀:

set (_allTargets "")

macro(add_library _target)
_add_library (${_target} ${ARGN})
list (APPEND _allTargets ${_target})
endmacro()

macro(add_executable _target)
_add_executable (${_target} ${ARGN})
list (APPEND _allTargets ${_target})
endmacro()

add_library(liba STATIC liba.cpp)
add_executable(main liba main.cpp)

add_custom_target(test "${CMAKE_CURRENT_SOURCE_DIR}/test.sh")

add_dependencies(test ${_allTargets})

另请注意,您不能使用 DEPENDS 将目标依赖项添加到自定义目标。选项。 DEPENDS只能引用现有文件或使用 add_custom_command(...) 生成的文件在同一个目录中。要添加目标依赖项,请使用 add_dependencies命令代替。

关于CMake add_custom_target 取决于正在构建的整个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6372150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com