2017-03-08 10 views
2

Ist es möglich, Cmake-Befehle in einem Python-Skript auszuführen? Ich möchte die Boost-Bibliotheken, die ich manuell installiert und über den Python-Code kompiliert habe, einstellen. Ich möchte etwas wie set(BOOST_INCLUDEDIR "/path/to/boost/include") über Python-Skript passieren. Bevor CMake läuft, möchte ich, dass die cmake-Variablen über den Python-Code gesetzt werden.Ausführen von Cmake-Befehlen in Python-Skript

+0

Es ist ein wenig unklar, was Sie erreichen möchten. Willst du Python als Teil von CMake starten, um deine 'CMakeLists.txt' zu verarbeiten und damit Python CMake-Variablen im laufenden CMake irgendwie setzen? – Angew

+0

Nein, vor dem Ausführen von 'cmake' möchte ich cmake-Variablen über Python-Skript setzen. –

+1

Können Sie Ihre Frage bearbeiten, um das deutlicher zu machen? – Angew

Antwort

0

Es gibt zwei Möglichkeiten zur Vorinitialisierung von CMake-Variablen vor Beginn der CMake-Verarbeitung, die beide command-line arguments of cmake verwenden.

Die einfachste Möglichkeit besteht darin, eine oder mehrere Variablen an CMake zu übergeben, indem die Befehlszeilenoption -D verwendet wird. Etwas wie folgt aus:

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

Die andere Option ist eine „anfängliche Cache-Datei“ (im Grunde eine Datei mit nur set(...) CMake-Befehle) und übergeben diese anfängliche Cache-Datei zu CMake mit -C zu erstellen:

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

Diese Option ist für die Verwendung beim ersten Ausführen von CMake mit einem bestimmten Binärverzeichnis vorgesehen, dh , bevor eine eigene CMakeCache.txt Datei erstellt.

Wie Sie eines oder beide von Ihrem Python-Skript verwenden können, hängt von Ihrer speziellen Konfiguration ab.

0

Ja

Option 1

Durch die Einstellung Cmake Cache Variablen von der Kommandozeile (wenn Sie Cmake über Python aufrufen). Die Syntax für die Definition dieses von der Kommandozeile ist wie folgt aus here

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

So in Ihrem Fall in der Cmake Listendatei

set(BOOST_INCLUDEDIR MY_BOOST_INCLUDE) 

Dann einfach diese Option außer Kraft setzen, wenn Cmake Aufruf

cmake -DMY_BOOST_INCLUDE:STRING="/path/to/wherever" 

Option 2 (wenn Sie Cmake an einem anderen Punkt aufrufen möchten)

Sie können ein Cmake-Modul in Python erstellen, das die gewünschten Definitionen festlegt. Zum Beispiel, ein Python-Skript, das my_module.cmake mit beliebigen Cache Variablen auffüllt Sie wollen, dh

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

Dann in Ihrer statischen Cmake Listendatei

include(my_module) 
+1

Option 2a) Führen Sie CMake mit '-C my_cache.cmake' aus, um die generierte Datei vorab zu laden, um den Cache zu füllen. – zaufi

0

Einige CMake des find modules tun Weg Unterstützung Lesen von Umwelt Hinweise Variablen:

  • „Benutzer diese Hinweise oder Ergebnisse als Cache-Einträge kann eingestellt . [...] Man kann diese als Umgebungsvariablen angeben, wenn sie nicht als CMake-Variablen oder Cache-Einträge angegeben sind."

  • Ich ziehe diese Methode der Entdeckung Modul-Verzeichnisse, weil es etwas, was ich auch auf Systemebene einstellen könnte und ich muss jeden einzelnen meiner CMake nicht geben projiziert die Pfade zu meinen benutzerdefinierten Bibliotheken bauen mehr .

  • FindBoost.cmake ist ein gutes Beispiel, weil es verschiedene Umgebungsvariable bietet:

    Boost_DIR 
    BOOSTROOT 
    BOOST_ROOT 
    BOOST_INCLUDEDIR 
    BOOST_LIBRARYDIR 
    
  • Hinweis: Diese werden als "Hinweise", da Sie werden keine Cmake-Cache-Werte überschreiben, sobald gefunden wurde.