我想添加一个测试目标,该目标依赖于成功构建的整个项目,而无需重新指定所有库或可执行文件的依赖项.
我会在make中写这个:
all: foo bar
foo: ...
bar: ...
test: all
test.sh
Run Code Online (Sandbox Code Playgroud)
test.sh隐式使用foo和bar并希望它们是最新的.
这就是我期望在cmake中指定它的方式.
add_library(foo ...)
add_executable(bar ...)
add_custom_target(test test.sh
DEPENDS all
)
Run Code Online (Sandbox Code Playgroud)
然而,由于没有所有目标,这不起作用.
有没有办法指定这个?或者是否有一个变量扩展到我想要构建的所有目标?
从版本2.8开始,CMake不提供包含所有目标列表的变量.你能做的最好是覆盖内置的命令add_library,并add_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})
Run Code Online (Sandbox Code Playgroud)
另请注意,您无法使用该DEPENDS选项将目标依赖项添加到自定义目标.DEPENDS可能只引用add_custom_command(...)在同一目录中生成的现有文件或文件.要添加目标依赖项,请改用add_dependencies命令.
| 归档时间: |
|
| 查看次数: |
5195 次 |
| 最近记录: |