Как использовать препроцессор C для замены переменной среды

StackOverflow https://stackoverflow.com/questions/2299824

Вопрос

В приведенном ниже коде мне нужно значение 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.

Если вам нужен эффект константы времени компиляции, вам придется указать определение в командной строке компилятора как Сет предполагает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top