2011-08-17 50 views
3

我有一個命令行工具,應該在CMake創建我的.sln文件後運行。有沒有辦法使用CMake來做到這一點?在CMake生成步驟後運行命令

在CMakeLists.txt末尾使用execute_process(COMMAND ..)並沒有幫助,因爲這是在配置步驟後執行的,但是.sln文件是在生成步驟中創建的。

非常感謝!

回答

0

是,add_custom_command與add_custom_target配對得到這個覆蓋

舉一個例子來看看我的回答另一個問題

+1

也許我不明白你的意思,但據我所知,用這些命令只能在構建過程中運行一個工具。 (我正在使用Visual Studio,並且該過程如下工作:我點擊「Build」 - >如果有任何更改,CMake會生成新的.sln文件 - > VS宏詢問我是否要重新加載解決方案 - >我按是 - >構建解決方案開始 - >自定義目標被執行,如果現在我的命令修改瞭解決方案,我必須重新加載我想避免的,我寧願在CMake的生成階段修改解決方案文件。 – Philipp 2011-08-19 09:48:12

0

一個相當可怕的方法是通過從cmake調用cmake並在父腳本的出路上執行後生成的東西。

option(RECURSIVE_GENERATE "Recursive call to cmake" OFF) 

if(NOT RECURSIVE_GENERATE) 
    message(STATUS "Recursive generate started") 
    execute_process(COMMAND ${CMAKE_COMMAND} 
     -G "${CMAKE_GENERATOR}" 
     -T "${CMAKE_GENERATOR_TOOLSET}" 
     -A "${CMAKE_GENERATOR_PLATFORM}" 
     -DRECURSIVE_GENERATE:BOOL=ON 
     ${CMAKE_SOURCE_DIR}) 
    message(STATUS "Recursive generate done") 

    # your post-generate steps here 

    # exit without doing anything else, since it already happened 
    return() 
endif() 

# The rest of the script is only processed by the executed cmake, as it 
# sees RECURSIVE_GENERATE true 

# all your normal configuration, targets, etc go here 

,如果你需要調用cmake的使用像「-DTHIS -DTHAT」命令行選項的各種組合這種方法不能很好地工作,但可能是可以接受的許多項目。它可以很好地處理持久緩存的變量,包括最初生成時的所有cmake編譯器檢測。