Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
-D选项从g+错误展开+;命令行 在C++ CODBROCK项目中,我将以下定义添加到项目设置、编译器设置、γ定义: _调试 DATA\u DIR=\“/media/Shared/SiX/DATA\”_C++_G++_C Preprocessor_Codeblocks - Fatal编程技术网

-D选项从g+错误展开+;命令行 在C++ CODBROCK项目中,我将以下定义添加到项目设置、编译器设置、γ定义: _调试 DATA\u DIR=\“/media/Shared/SiX/DATA\”

-D选项从g+错误展开+;命令行 在C++ CODBROCK项目中,我将以下定义添加到项目设置、编译器设置、γ定义: _调试 DATA\u DIR=\“/media/Shared/SiX/DATA\”,c++,g++,c-preprocessor,codeblocks,C++,G++,C Preprocessor,Codeblocks,这将生成以下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 obj/Debug/PathManager.o g++-Wall-g-fPIC-save temps-D_DEBUG-DDATA_DIR=\“/media/Shar

这将生成以下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 obj/Debug/PathManager.o g++-Wall-g-fPIC-save temps-D_DEBUG-DDATA_DIR=\“/media/Shared/SiX/Data\”-I../Includes-c/media/Shared/SiX/SiXConfiguration/PathManager.cpp-o obj/DEBUG/PathManager.o 此代码不编译:

char* commonDataDir; #ifdef DATA_DIR commonDataDir = DATA_DIR; #endif char*commonDataDir; #ifdef数据目录 commonDataDir=数据目录; #恩迪夫 查看预处理器输出文件,我看到源代码行是这样展开的:

commonDataDir = /media/Shared/SiX/Data; commonDataDir=/media/Shared/SiX/Data; 我期望:

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++-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++proprocessor进行不同的处理。如何修复此问题?

您需要将整个字符串括在

这似乎可以解决问题

g++ -DDATA_DIR='"/media/Shared/SiX/Data"' ...

在宏上加引号很棘手,不是一个好主意。
尝试使用预处理器添加所需的引号

#define DO_QUOTE(X)       #X
#define QUOTE(X)          DO_QUOTE(X)

#ifndef DATA_DIR
#define DATA_DIR       /tmp
#endif

char commonDataDir[] = QUOTE(DATA_DIR);

在代码::Blocks项目构建选项->编译器设置->定义中

DATA_DIR=\\"/media/Shared/SiX/Data\\"

(这不仅仅是猜测,而是我经常做的事情)

我只是在当前项目的make文件中使用了一行类似于
-DDATA\u DIR=\“/media/Shared/SiX/Data\”
的代码,效果很好(单反斜杠和双引号)

环境:

> uname -a
Linux ... 3.16.0-5-amd64 #1 SMP Debian 3.16.51-3+deb8u1 (2018-01-08) x86_64 GNU/Linux
> make -v
GNU Make 4.0
Built for x86_64-pc-linux-gnu
> g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ...
Thread model: posix
gcc version 4.9.2 (Debian 4.9.2-10+deb8u1)

尝试了这个,得到了与我的版本相同的结果。
DATA_DIR=\\"/media/Shared/SiX/Data\\"
> uname -a
Linux ... 3.16.0-5-amd64 #1 SMP Debian 3.16.51-3+deb8u1 (2018-01-08) x86_64 GNU/Linux
> make -v
GNU Make 4.0
Built for x86_64-pc-linux-gnu
> g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ...
Thread model: posix
gcc version 4.9.2 (Debian 4.9.2-10+deb8u1)