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
Antwort
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.
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)
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
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 boost gefunden wurde.
- 1. Django Help: Wie man Textdaten von der Textbox nimmt und Pythonskript durchläuft?
- 2. Perl Ausführen von DBI Ausführen in Schleife
- 3. Ausführen von Node.js in Apache?
- 4. Ausführen von Befehlen in Makefile
- 5. Ausführen von Datenbankskripten in C#
- 6. Ausführen von SP in Oracle
- 7. Ausführen von Hintergrundaufgabe in Javascript
- 8. Ausführen von "enthält" in Excel
- 9. Ausführen von .EXE in Node.JS
- 10. Ausführen von gucion.js in WebStorm
- 11. Ausführen von Skripts in HtmlAgilityPack
- 12. Ausführen von Animationen in Android
- 13. Ausführen von TextBlob in Python3
- 14. Ausführen von JavaScript in C#
- 15. Ausführen von App Engine-Apps lokal ausführen.
- 16. Ausführen von javaScript in UIWebView in Swift
- 17. Ausführen von SSH in SSH in perl
- 18. Ausführen von stereo_match.cpp von OpenCV_Sample
- 19. Ausführen von mehreren Threads
- 20. Ausführen von Soapui von JUnit
- 21. Ausführen von Xcode-Konsole
- 22. Ausführen von Java-Anwendungen
- 23. window.onbeforeunload Ausführen von Abfrage
- 24. Ausführen Sp_setapprole von ExecuteSqlCommand
- 25. Ausführen von Aufgabenpaaren parallel
- 26. Ausführen von Blöcken von NSArray?
- 27. Ausführen Skript von von einreichen
- 28. Ausführen von Doctests von Pydev?
- 29. Ausführen von Latex von C#
- 30. Erneutes Ausführen von Doktrinierungsmigrationen
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
Nein, vor dem Ausführen von 'cmake' möchte ich cmake-Variablen über Python-Skript setzen. –
Können Sie Ihre Frage bearbeiten, um das deutlicher zu machen? – Angew