Wie verwende ich den C-Präprozessor eine Substitution mit einer Umgebungsvariablen zu machen
-
21-09-2019 - |
Frage
In dem folgenden Code, würde ich den Wert von THE_VERSION_STRING
wie aus dem Wert des Umgebungsvariablen MY_VERSION
bei der Kompilierung genommen werden
namespace myPluginStrings {
const char* pluginVendor = "me";
const char* pluginRequires = THE_VERSION_STRING;
};
Also, wenn ich ein:
export MY_VERSION="2010.4"
pluginRequires
wird bei „2010.4“ gesetzt werden, auch wenn MY_VERSION
auf etwas gesetzt wird sonst zur Laufzeit.
UPDATE: (21. Februar) Vielen Dank für Ihre Hilfe jeder. Es klappt. Wie ich Rake als Build-System bin mit jedem meiner CFLAGS ist ein Ruby-Variable. Auch müssen die Werte in Anführungszeichen enden. Deshalb ist die gcc-Befehlszeile für mich muss wie folgt aussehen:
gcc file.c -o file -D"PLUGIN_VERSION=\"6.5\""
Was bedeutet dies in meinem Rakefile ist:
"-D\"PLUGIN_VERSION=\\\"#{ENV['MY_VERSION']}\\\"\""
Lösung
Wenn ich mich richtig erinnere, können Sie die Befehlszeilenparameter verwenden -D
mit gcc #define
einem Wert zum Zeitpunkt der Kompilierung.
h .:
$ gcc file.c -o file -D"THE_VERSION_STRING=${THE_VERSION_STRING}"
Andere Tipps
In dem folgenden Code, würde ich den Wert von THE_VERSION_STRING wie aus dem Wert der Umgebungsvariablen MY_VERSION bei der Kompilierung genommen werden
Nein, man kann es so nicht. Der einzige Weg, um Extrakt Umgebungsvariablen zur Laufzeit mit der getenv()
Funktion. Sie müssen explizit den Wert extrahieren und kopieren Sie sie in pluginRequires
.
Wenn Sie die Wirkung einer Compile-Zeit konstant wollen, dann werden Sie die Definition auf der Compiler-Kommandozeile als Seth vermuten läßt.