从环境变量生成 #include 宏
Generate #include macro from environment variable
正如你所说,它有效。
但我能否以某种方式构建 include 指令的字符串?
像
在.login
setenv REPO "/tmp"
编译
# gcc -D"REPO=${REPO}" source.c
在source.c
#ifdef REPO
#include ${REPO}/my_dir/my_file.h
#endif
谢谢
正如 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>"
(注意引号)编译,仅 可以正常工作。
正如你所说,它有效。
但我能否以某种方式构建 include 指令的字符串? 像
在.login
setenv REPO "/tmp"
编译
# gcc -D"REPO=${REPO}" source.c
在source.c
#ifdef REPO
#include ${REPO}/my_dir/my_file.h
#endif
谢谢
正如 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>"
(注意引号)编译,仅 可以正常工作。