【问题标题】:Generate #include macro from environment variable从环境变量生成#include 宏
【发布时间】:2015-04-15 10:01:03
【问题描述】:

正如你所说,它有效。

但是我可以以某种方式构建包含指令的字符串吗? 类似的东西

在.login

setenv REPO "/tmp"

编译

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

在 source.c 中

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

谢谢

【问题讨论】:

  • 预处理器只是编译时的东西,它在运行时不能做任何事情。它也是与 C 不同的语言,因此不了解 C 变量。
  • 但是,您可以通过在命令行上定义宏来修复它,例如gcc DMY_INCLUDE="$MY_ENV_VAR" my_source.c
  • 感谢您的回复!我试试

标签: c include environment-variables c-preprocessor


【解决方案1】:

正如 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=&lt;stdio.h&gt;"(注意引号)编译,则可以正常工作。

【讨论】:

  • 感谢您的解释!我会试试你的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 2014-06-10
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多