在 C++ CodeBlocks 项目中,我在项目设置、编译器设置、#define 中添加了以下定义:
_调试
DATA_DIR=\"/media/Shared/SiX/Data\"
这会产生以下 g++ 命令行:
g++ -Wall -g -fPIC -save-temps -D_DEBUG -DDATA_DIR=\"/media/Shared/SiX/Data\"-I../Includes -c/media/Shared/SiX/SiXConfiguration/PathManager.cpp -o对象/调试/PathManager.o
此代码无法编译:
char* commonDataDir;
#ifdef DATA_DIR
commonDataDir = DATA_DIR;
#万一
查看预处理器输出文件,我看到源代码行以这种方式展开:
commonDataDir =/media/Shared/SiX/Data;
我预计:
commonDataDir = "/media/Shared/SiX/Data";
从 Eclipse CDT 正确编译相同的代码:
g++ -D_DEBUG -DDATA_DIR=\"/media/Shared/SiX/Data\"-I"/media/Shared/SiX (copy)/Includes"-O3 -Wall -c -fmessage-length=0 -fPIC -ggdb - MMD -MP -MF"PathManager.d"-MT"PathManager.d"-o"PathManager.o""../PathManager.cpp"
因此,相同的命令行参数由 g++ 处理器以不同方式处理。我怎样才能解决这个问题?
最佳答案
在宏上加引号很棘手,也不是一个好主意。
尝试使用预处理器添加所需的引号。
#define DO_QUOTE(X) #X
#define QUOTE(X) DO_QUOTE(X)
#ifndef DATA_DIR
#define DATA_DIR /tmp
#endif
char commonDataDir[] = QUOTE(DATA_DIR);
关于c++ - -D 选项从 g++ 命令行错误地扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3959398/