为什么add_custom_command不起作用

时间:2014-02-12 13:38:26

标签: cmake

我正尝试使用以下命令将一个文件${PROJECT_SOURCE_DIR}/abc.h复制到另一个位置{PROJECT_SOURCE_DIR}/src

  add_custom_command(
        TARGET MyTarget
        POST_BUILD
        COMMAND -E copy ${PROJECT_SOURCE_DIR}/abc.h
        $<"${PROJECT_SOURCE_DIR}/src":MyTarget>)

但是,无论我如何尝试,似乎创建的VC Studio项目都不会执行文件复制。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:3)

有几个问题。

首先,您要在自定义命令中执行cmake -E copy ...。为此,您可以通过变量CMAKE_COMMAND提供CMake可执行文件的路径。

接下来,在这种情况下,您不需要生成器表达式。您只需从"${PROJECT_SOURCE_DIR}/abc.h"复制到"${PROJECT_SOURCE_DIR}/src"

即可

所以,你的最终命令应该更像:

add_custom_command(
      TARGET MyTarget
      POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/abc.h"
                                       "${PROJECT_SOURCE_DIR}/src")

顺便说一句,如果复制的文件构成了构建的一部分,那么最好使用cmake -E copy_if_different ...而不仅仅是copy,因为这不会不必要地更新复制文件的时间戳。 (如果文件被视为“已更新”,则在重建发生时#include将重新编译它的所有源。)