来自另一个目标的add_custom_command

时间:2013-07-23 20:57:23

标签: c cmake

我目前正在尝试使用两个可执行文件设置一个CMake项目,其中一个是用于为另一个生成代码的简单实用程序。 CMakeLists.txt的相关位:

add_executable(lua2c lua2c.c)
add_custom_command(OUTPUT lcode.c COMMAND lua2c lcode.lua lcode.c MAIN_DEPENDENCY lua2c)
...
add_executable(darpem ... lcode.c)

使用此设置,目标lua2c结束时没有依赖关系,这会导致cc抱怨没有输入文件。如果我删除add_custom_command行,则lua2c已正确构建,但显然不会生成文件lcode.c。在CMake中这可能吗?我是否需要添加各种子目录依赖项?

在Ubuntu 13.04,x86-64上使用CMake版本2.8.1。

注意:对于我的特定情况,因为lua2c很简单,我可以使用其他语言。但是,我仍然对如何实现这一点感到好奇(对于更复杂的设置)。

1 个答案:

答案 0 :(得分:2)

来自文档:

  

请注意, MAIN_DEPENDENCY 是完全可选的,可用作visual studio关于挂起自定义命令的位置的建议。

也许这可以解决你的问题:

add_executable(lua2c lua2c.c)
add_custom_command(OUTPUT lcode.c COMMAND lua2c lcode.lua lcode.c DEPENDS lua2c)
#                                                                 ^^^^^^^
...
add_executable(darpem ... lcode.c)

如果它不起作用,这个应该可以工作:

add_executable(lua2c lua2c.c)
add_custom_command(TARGET lua2c
                    POST_BUILD
                    COMMAND lua2c lcode.lua lcode.c )

...
add_executable(darpem ... lcode.c)
add_dependencies( darpem lua2c )

它只是在构建lua2c之后添加一个post build事件。并添加lua2c作为darpem的依赖项。