从环境变量生成#include宏

时间:2015-04-15 10:01:04

标签: c include environment-variables c-preprocessor

如你所说,它有效。

但我可以用某种方式构建 - include指令的字符串吗? 像

这样的东西 <。>在.login

setenv REPO "/tmp"

编译

# gcc -D"REPO=${REPO}" source.c

在source.c中

#ifdef REPO
    #include ${REPO}/my_dir/my_file.h 
#endif

感谢

1 个答案:

答案 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>"进行编译,则只能 。(请注意引号)。