Как использовать препроцессор C для замены переменной среды
-
21-09-2019 - |
Вопрос
В приведенном ниже коде мне нужно значение THE_VERSION_STRING
следует взять из значения переменной среды MY_VERSION
во время компиляции
namespace myPluginStrings {
const char* pluginVendor = "me";
const char* pluginRequires = THE_VERSION_STRING;
};
Итак, если я наберу:
export MY_VERSION="2010.4"
pluginRequires
будет установлено значение «2010.4», даже если MY_VERSION
установлено на что-то другое во время выполнения.
ОБНОВЛЯТЬ: (21 февраля) Спасибо всем за помощь.Оно работает.Поскольку я использую Rake в качестве системы сборки, каждый из моих CFLAGS является переменной Ruby.Также значения должны быть заключены в кавычки.Поэтому командная строка gcc для меня должна выглядеть так:
gcc file.c -o file -D"PLUGIN_VERSION=\"6.5\""
Это означает, что это есть в моем Rakefile:
"-D\"PLUGIN_VERSION=\\\"#{ENV['MY_VERSION']}\\\"\""
Решение
Если я правильно помню, вы можете использовать параметр командной строки -D
с gcc для #define
значение во время компиляции.
то есть:
$ gcc file.c -o file -D"THE_VERSION_STRING=${THE_VERSION_STRING}"
Другие советы
В приведенном ниже коде я бы хотел, чтобы значение THE_VERSION_STRING было взято из значения переменной среды MY_VERSION во время компиляции.
Нет, ты не можешь сделать это вот так.Единственный способ извлечь переменные среды — во время выполнения с помощью getenv()
функция.Вам нужно будет явно извлечь значение и скопировать его в pluginRequires
.
Если вам нужен эффект константы времени компиляции, вам придется указать определение в командной строке компилятора как Сет предполагает.