2017-03-08 194 views
2

是否可以在python腳本中運行cmake命令?我想設置我通過python代碼手動安裝和編譯的boost庫。我希望通過python腳本發生類似set(BOOST_INCLUDEDIR "/path/to/boost/include")的事情。所以,在運行cmake之前,我想通過python代碼設置cmake變量。在python腳本中運行cmake命令

+0

這是有點不清楚你想達到什麼。你是否希望啓動Python作爲CMake處理你的'CMakeLists.txt'的一部分,並讓Python以某種方式在當前運行的CMake中設置CMake變量? – Angew

+0

不,在運行'cmake'之前我想通過python腳本設置cmake變量。 –

+1

你可以[編輯]你的問題,使其更明顯? – Angew

回答

0

在CMake處理開始之前,有兩種方法可以預先初始化CMake變量,都使用command-line arguments of cmake

簡單的方法是使用-D命令行選項將一個或多個變量傳遞給CMake。是這樣的:

cmake -DBOOST_INCLUDEDIR:PATH="/path/to/boost/include" ... 

另一種選擇是使用-C創建「初始緩存文件」(基本上只包含set(...) CMake的命令的文件),並通過該初始高速緩存文件的CMake:

echo 'set(BOOST_INCLUDEDIR "/path/to/boost/include" CACHE PATH "")' > initial_cache.cmake 
cmake -C initial_cache.cmake ... 

這個選項是用於第一次使用CMake時運行一個給定的二進制目錄,即之前它創建它自己的CMakeCache.txt文件。

如何利用Python腳本中的一個或兩個腳本取決於您的特定設置。

0

選項1(如果你調用通過Python的cmake)

通過命令行設置的CMake緩存變量。從命令行定義這個語法是here

-D <var>:<type>=<value> 

所以你的情況如下,CMake的列表文件

set(BOOST_INCLUDEDIR MY_BOOST_INCLUDE) 

調用cmake的

cmake -DMY_BOOST_INCLUDE:STRING="/path/to/wherever" 
時,然後只需重寫選項

選項2(如果您想在另一點調用cmake)

你可以在python中創建一個cmake模塊來設置你想要的定義。例如,做一個Python腳本,填充my_module.cmake你想要的任何緩存變量,即

set(MY_BOOST_INCLUDE "script/generated/path") 
#... other stuff you want to define 

然後在靜態cmake的列表文件

include(my_module) 
+1

選項2a)用'-C my_cache.cmake'運行CMake預加載生成的文件以填充緩存。 – zaufi

0

一些的CMake的find modules做支持讀取路徑,從環境的暗示變量:

  • 「用戶可以設置這些提示或結果的緩存條目。 [...]如果它們沒有被指定爲CMake變量或緩存條目,可以將它們指定爲環境變量。「

  • 我喜歡設置查找模塊目錄的這個方法,因爲它的東西,我也可以設置系統級和我沒有給我的CMake的每一個項目的路徑,以我的自定義建庫了。

  • FindBoost.cmake是一個很好的例子,因爲它提供了各種環境變量:

    Boost_DIR 
    BOOSTROOT 
    BOOST_ROOT 
    BOOST_INCLUDEDIR 
    BOOST_LIBRARYDIR 
    
  • :那些被認爲是 「提示」,因爲一旦找到,它們將不會覆蓋任何CMake緩存值。