Во-первых, не забудьте getenv прочитать переменную окружения в строку, если вы можете избежать использования простой строки вместо переменной препроцессора. Например.,
#include <stdlib.h>
char *ug = getenv("USER_GRADHA");
if (ug) {
//use the environment variable here
} else {
//it's NULL == undefined env variable (in all likelihood)
}
Если вам нужна переменная препроцессора, оболочка может установить ее при вызове компилятора, используя стандартные для POSIX флаги -D или -U. К сожалению, простой
gcc -DUSER_GRADHA=$USER_GRADHA file.c
вероятно, вызовет у вас проблемы, потому что, если переменная среды не определена, у вас будет пустая, но определенная переменная препроцессора. Поэтому может быть проще всего использовать условную оболочку, например
if [ $USER_GRADHA ] ; then ug="-D$USER_GADHA"; else ug="-U$USER_GRADHA"; fi
c99 $ug file.c
Это легко реализовать в make-файле или во многих других видах ловушек для выполнения произвольного кода оболочки для компиляции.
Наконец, всегда есть Autotools, который предназначен именно для этой задачи компиляции на основе информации об окружении. Вы спрашивали о Xcode, поэтому Autotools может не соответствовать вашему рабочему процессу (и многие люди не понимают Autotools и отвергают его сразу), но он есть, если вы хотите.
person
bk.
schedule
27.01.2016