在C++预处理器中为参数添加引号

Jon*_*man 23 c++ c-preprocessor double-quotes

我想将包含文件的名称作为编译器参数传递,以便我可以修改大量配置参数.但是,我的C++构建是通过类似进程的makefile来删除传递给编译器和预处理器的参数的引号.我希望做一些相当于的事情

#ifndef FILE_ARG
// defaults
#else
#include "FILE_ARG"
#endif
Run Code Online (Sandbox Code Playgroud)

使用我的命令行包括-DFILE_ARG = foo.h.这当然不起作用,因为预处理器不翻译FILE_ARG.

我试过了

#define QUOTE(x) #x
#include QUOTE(FILE_ARG)
Run Code Online (Sandbox Code Playgroud)

由于同样的原因不起作用.

出于脚本原因,我宁愿在命令行上执行此操作,也不要在相应的例程中编辑包含行.有什么办法吗?

Kar*_*ath 33

要添加引号,您需要这个技巧:

#define Q(x) #x
#define QUOTE(x) Q(x)

#ifdef FILE_ARG
#include QUOTE(FILE_ARG)
#endif
Run Code Online (Sandbox Code Playgroud)


job*_*ess 6

你可以做

#ifdef FILE_ARG
#include FILE_ARG
#endif
Run Code Online (Sandbox Code Playgroud)

在命令行上

$ gcc -DFILE_ARG="\"foo.h\"" ...
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩。

  • 使用带有单引号的 `-DFILE_ARG='"foo.h"'` 比使用反斜杠双引号更简单... (4认同)