我目前正在尝试用两个可执行文件建立一个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)

使用此设置,targetlua2c结束时没有依赖项,这会导致cc抱怨没有输入文件。如果我删除add_custom_command行,那么lua2c将正确构建,但显然不会生成文件lcode.c。这在芝加哥有可能吗?我需要添加排序的子目录依赖项吗?
在Ubuntu 13.04,x86-64上使用CMake 2.8.1版本。
注意:对于我的特殊情况,因为lua2c足够简单,所以我可以使用不同的语言。然而,我仍然很好奇这是怎么可能的(对于更复杂的设置)。

最佳答案

从文档中:
请注意,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之后添加一个生成后事件。它添加lua2c作为darpem的依赖项。

10-06 15:09