我想将包含文件的名称作为编译器参数传递,这样我就可以修改大量的配置参数。但是,我的C++构建是通过一个类似makefile的过程,从传递给编译器和预处理器的参数中删除引号。我希望能做些等同于
#ifndef FILE_ARG
// defaults
#else
#include "FILE_ARG"
#endif
使用我的命令行,包括-DFILE_ARG=foo.h。这当然不起作用,因为预处理器不能翻译FILE_ARG。
我试过了
#define QUOTE(x) #x
#include QUOTE(FILE_ARG)
但由于同样的原因,这并不起作用。
出于脚本编写的原因,我宁愿在命令行中执行此操作,也不愿在适当的例程中编辑include行。有什么办法吗?
发布于 2011-07-13 06:01:03
要添加报价,您需要以下技巧:
#define Q(x) #x
#define QUOTE(x) Q(x)
#ifdef FILE_ARG
#include QUOTE(FILE_ARG)
#endif
发布于 2011-07-13 06:30:37
你可以做到
#ifdef FILE_ARG
#include FILE_ARG
#endif
在命令行上
$ gcc -DFILE_ARG="\"foo.h\"" ...
应该能行得通。
https://stackoverflow.com/questions/6671698
复制相似问题