cmake - 如何在 CMake 中将命令附加到 add_custom_target
问题描述
假设我在 CMake 中有一个用于单元测试的自定义目标,如下所示
add_custom_target(
test
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/ATest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/BTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/CTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/DTest)
但我想根据是否找到外部依赖项向目标添加额外的测试。目前,我用
if(EXTERNAL_FOUND)
add_custom_target(
test
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/ATest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/BTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/CTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/DTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/ETest)
else()
add_custom_target(
test
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/ATest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/BTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/CTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/DTest)
endif()
这不是很优雅,当有多种条件时,它很快就会变得难以管理。是否有类似附加到自定义目标的东西,所以我们可以写下面的内容?
add_custom_target(
test
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/ATest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/BTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/CTest
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/DTest)
if(EXTERNAL_FOUND)
# I can't seem to find something like this
append_custom_target(test COMMAND ${CMAKE_CURRENT_BINARY_DIR}/ETest)
else()
还是有更好的方法来做到这一点?
解决方案
您可以使用add_custom_command并将其用作目标的依赖项。使用自定义命令,您可以APPEND
使用相同的命令OUTPUT
:
add_custom_target(
test
DEPENDS test-cmd
)
add_custom_command(
OUTPUT test-cmd
COMMAND ${CMAKE_COMMAND} -E echo "ATest"
COMMAND ${CMAKE_COMMAND} -E echo "BTest"
COMMAND ${CMAKE_COMMAND} -E echo "CTest"
COMMAND ${CMAKE_COMMAND} -E echo "DTest"
)
if(EXTERNAL_FOUND)
add_custom_command(
OUTPUT test-cmd APPEND
COMMAND ${CMAKE_COMMAND} -E echo "ETest"
)
endif()
# test-cmd is not actually generated so set it to symbolic
set_source_files_properties(test-cmd PROPERTIES SYMBOLIC "true")
有关人工源文件属性,请参见SYMBOLIC。
推荐阅读
- servicenow - ServiceNow 监听器
- kotlin - 从适配器接收数据到DetailsActivity?
- batch-file - .bat 批处理文件如何从字符串中获取环境变量?
- r - 使用 ggplot 对两个变量进行排序并重新排序
- sql-server - 通过返回重复项聚合不带组
- matplotlib - 取另一个列值在条形图中进行注释
- google-chrome - 使用 MapBox loadImage 函数时,仅在 Chrome 中出现 AWS S3 CORS 错误
- azure - “允许请求者批准他们自己的更改”的描述令人困惑
- laravel - 如何在 Laravel 中验证文件?
- scala - 元组为零的 HList foldLeft