1

我目前正在尝试使用两个可执行文件设置一个 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足够简单,我可以使用不同的语言。但是,我仍然很好奇这怎么可能(对于更复杂的设置)。

4

1 回答 1

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。并将其添加lua2cdarpem.

于 2013-07-23T21:22:48.500 回答