2011-10-01 62 views
1

在CMake中,我现在有一个简单的Python脚本来生成头文件,但如果我更新脚本本身,CMake不会重新运行脚本。有没有办法让我的CMake做到这一点?CMake头生成器更新

回答

2

看起来您是在cmake运行时直接调用您的代码生成脚本。虽然这是可能的解决方案,但它绝对不是一个正确的方式来使用cmake的代码生成器。

我建议你使用add_custom_command为您的情况:

add_custom_command(
    OUTPUT generated.h 
    COMMAND ${PYTHON_EXECUTABLE} generator.py 
    DEPENDS generator.py 
    ) 

而接下来,你可以简单的把你的头传递给add_library/add_executable命令的源文件的列表。 cmake会自动跟踪所有的依赖关系并调用你的脚本。

期限DEPENDS generator.py通知cmake它应该在脚本更改后重新生成头文件。

使用此方法文件generated.h将仅在编译时生成(当您运行make或在IDE中执行构建命令时)。相反,如果您在cmake时间运行脚本(使用execute_process命令),则必须重新运行cmake以重新生成文件。这是可能的,但你需要使用一些技巧来引入一个非标准的依赖关系。