我想添加一个依赖于成功构建的整个项目的测试目标,而无需重新指定对所有库或可执行文件的依赖关系。
我会在 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_library
and add_executable
使用自定义宏调用内置宏并跟踪变量中所有定义的目标。
您甚至可以对自定义宏使用相同的名称。这样您就不必对所有现有的进行更改add_library
and 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
命令代替。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)