2011-10-01 98 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以重新生成文件。這是可能的,但你需要使用一些技巧來引入一個非標準的依賴關係。