在每个构建上执行的cmake add_custom_command

时间:2013-07-17 10:05:12

标签: cmake add-custom-command

我想在CMake中有一些东西会在我输入make

时执行
add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/build_date.cc
    PRE_BUILD
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_build_date.py 
            ${CMAKE_CURRENT_BINARY_DIR}/build_date.cc
)
add_custom_target(build-date-xxx 
                  ALL
                  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/build_date.cc)
这就是我目前正在做的事情。遗憾的是,make build-date-xxx只生成一次文件。

即使没有add_custom_target声明,文件也只构建一次。

在GNU Make

中结果应该是这样的
.PHONY all: 
    echo "hallo welt"
all: foo.c bar.c
%.c:
    touch $@
输入make时,在该makefile中

。因为all是第一个目标,所以它总是被调用,并且实际执行自定义命令echo "hallo welt"

2 个答案:

答案 0 :(得分:1)

尝试使用ADD_CUSTOM_TARGET并在其中使用ALL参数。 然后使主要目标依赖于此自定义目标。

答案 1 :(得分:0)

撤消您的订单...拥有一个生成您的文件的自定义目标没有依赖(无DEPENDS),并添加依赖于此目标的自定义命令,提及它OUTPUT是文件,并没有真正做任何事情(例如COMMAND ${CMAKE_COMMAND} -E echo)。然后在某处提到输出文件(可能是你将它作为库或可执行文件的源)。 (您也可以使用ALL作为自定义目标,但我假设某些代码对象实际使用了输出文件,因此您希望所述代码对象依赖于输出文件。)

理想情况下,您希望不要修改文件,除非实际发生变化,否则您将无法获得无操作版本。 (如何做到这一点留给读者练习。)