如何使#if预处理器以另一个不同文件中的值为条件?

时间:2017-10-10 05:34:03

标签: c++ preprocessor

例如,如果"设置"文件存在并具有以下内容:

system,ubuntu

是否可以使用预处理器#if根据设置文件中的值自定义代码?例如:

#if lookup_system == "ubuntu" // loopup_system is pseudocode

另一种用途可能是查询代码是否在生产服务器上运行。

1 个答案:

答案 0 :(得分:0)

你做不到。

但是,您可能从外部数据生成一些头文件autoconf实用程序执行此操作(实际生成一些生成此标头的configure脚本。)

更一般地说,您应该设置build automation系统(例如,为GNU make编辑Makefile,或为ninja编辑build.ninja)以生成该系统头文件适当(可能是一个小脚本,你自己的C ++ - 另一个程序,或其他)。您还可以拥有一个聪明的构建系统,将特定的-D flags传递给您的编译器。

请记住 C ++文件(两个标题文件,例如.hh和实施文件,例如.cc ...)可以通过其他内容生成 。这是常见的做法。

详细了解您的preprocessor,例如关于cpp。这是一个只编译的东西。使用GCC,您可以使用such as foo.ii命令获取foo.cc文件的预处理表单g++ -C -E foo.cc > foo.ii