2013-07-17 71 views
1

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

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 [email protected] 

在生成文件每当进入化妆。因为全部是第一个目标,所以它总是被调用,并且自定义命令echo "hallo welt"被实际执行。

+0

密切相关,但执行得太晚:http://stackoverflow.com/questions/13920072/cmake-always-run-command-regardless-of-any - 依赖 – Alex

回答

1

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

+0

实际上,这正是我所看到的cmake中的第二个命令。它一旦运行cmake就会生成文件。但并不是每次制作都运行。 – Alex

0

反向您的订单...有一个自定义的目标不依赖(无DEPENDS)生成的文件,并添加依赖于这一目标的自定义命令,提到它OUTPUT s文件,并没有按”实际上做任何事情(例如COMMAND ${CMAKE_COMMAND} -E echo)。然后在某处提到输出文件(大概是将它作为库或可执行文件的来源)。 (您也可以使用ALL作为自定义目标,但我假定某些代码对象实际上使用输出文件,所以您希望所述代码对象依赖于输出文件。)

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

相关问题