首先,不要忘記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,所以自動工具可能不適合您的工作流程(和很多人不理解自動工具,並駁回了手),但如果你想它,它的存在。