首先,不要忘记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
这是很容易在makefile或许多其他类型的挂钩来实现,以编译执行任意shell代码。
最后,总有自动工具,这是专为编制依据有关环境信息的正是这个问题。你问到的Xcode,所以自动工具可能不适合您的工作流程(和很多人不理解自动工具,并驳回了手),但如果你想它,它的存在。