从环境变量生成 #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>"(注意引号)编译, 可以正常工作。