Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CMake中追加添加自定义目标的命令_Cmake - Fatal编程技术网

如何在CMake中追加添加自定义目标的命令

如何在CMake中追加添加自定义目标的命令,cmake,Cmake,假设我在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}/DTes

假设我在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_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")

有关人工源文件属性,请参阅。

“或者有更好的方法吗?”->使用CTest()