如你所说,它有效。
但我可以用某种方式构建 - include指令的字符串吗? 像
这样的东西 <。>在.loginsetenv REPO "/tmp"
编译
# gcc -D"REPO=${REPO}" source.c
在source.c中
#ifdef REPO
#include ${REPO}/my_dir/my_file.h
#endif
感谢
答案 0 :(得分:2)
正如Joachim所写,在GCC中,您可以使用命令行中的-D
flag到#define
内容:
gcc -DTEST source.c
// in source.c
#include <stdio.h>
int main() {
#ifdef TEST
printf("TEST macro is #defined!\n"); // only runs if -DTEST
#endif
return 0;
}
您可以通过此方式轻松插入环境变量(在编译时) 机构:
gcc "-DTEST=$MY_ENV_VAR" source.c
如果您需要使用环境变量的运行时值,那么宏预处理器(#define
,#ifdef
,...)无法帮助您。请改用getenv()
,忘记宏。
更重要的是:
#include TEST
int main() {
printf("Hello world!\n");
return 0;
}
如果使用"-DTEST=<stdio.h>"
进行编译,则只能 。(请注意引号)。