即在每次构建执行cmake的add_custom_command(cmake add_custom_

2019-10-18 09:42发布

我想在CMake的东西,将被执行每当我进入使

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制作

.PHONY all: 
    echo "hallo welt"
all: foo.c bar.c
%.c:
    touch $@

在生成文件每当进入化妆。 因为所有的第一目标,它会永远被调用和自定义命令echo "hallo welt"的实际执行。

Answer 1:

尝试使用ADD_CUSTOM_TARGET和使用参数全部在里面。 然后让你的主要目标依赖于这种自定义的目标。



Answer 2:

反向您的订单...... 有没有依赖关系 (不定制目标DEPENDS )生成的文件,并添加依赖于这一目标的自定义命令,提到它OUTPUT S中的文件,实际上并没有做任何事情(如COMMAND ${CMAKE_COMMAND} -E echo )。 再一提的输出文件的地方(大概是你拥有了它作为一个库或可执行文件的来源)。 (您也可以使用ALL自定义的目标,但我假设一些代码对象实际使用的输出文件,所以你会想要说的代码对象取决于输出文件。)

理想情况下,你会希望修改该文件,以避免,除非有实际改变,否则你永远不会得到一个空操作版本。 (如何做到这一点就留给读者自己练习。)



文章来源: cmake add_custom_command that is executed on every build