如何使#if预处理器以另一个不同文件中的值为条件?
问题描述:
例如,如果一个“设置”文件存在,并且有以下几点:如何使#if预处理器以另一个不同文件中的值为条件?
system,ubuntu
能预处理器#if
被用于定制的设置文件依据的值的代码?例如:
#if lookup_system == "ubuntu" // loopup_system is pseudocode
另一用途可能是查找代码是否已在生产服务器上运行。
答
你不能那样做。
但是,您可能会从从外部数据生成一些头文件。 autoconf实用程序会这样做(实际上会生成一些生成此类标头的configure
脚本)。
更一般地,你应该建立你的build automation系统(例如编辑Makefile
为GNU make,或者您build.ninja
为ninja)生成的头文件合适(也许一个很小的脚本,自己的C++程序-another-,或随你)。你也可以有一个聪明的编译系统将特定的-D
flags传递给你的编译器。
记住C++文件(包括头文件如.hh
和实现文件例如.cc
...)可以通过别的来产生。这是常见的做法。
了解更多关于您的preprocessor,例如约cpp
。这是一个只编译的东西。使用GCC,您可以使用命令such asg++ -C -E foo.cc > foo.ii
获取foo.cc
文件的预处理表单foo.ii
。
这只有在构建系统解析“settings”文件时才有可能,构建系统在构建时添加了正确的宏。请记住,预处理器只是一个*编译时*的事情。 –