3

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 obj / Debug / PathManager.o

このコードはコンパイルされません:

char * commonDataDir;
#ifdef DATA_DIR
commonDataDir = DATA_DIR;
#endif

プリプロセッサの出力ファイルを見ると、ソースコードの行が次のように展開されていることがわかります。

commonDataDir = / media / Shared / SiX / Data;

私が期待する:

commonDataDir = "/ media / Shared / SiX / Data";

同じコードがEclipseCDTから正しくコンパイルされます。

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++プロプロセッサによって異なる方法で処理されます。どうすればこれを修正できますか?

4

5 に答える 5

4

マクロに引用符を付けるのは難しいので、お勧めできません。
プリプロセッサを使用して、必要な見積もりを追加してみてください。

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

#ifndef DATA_DIR
#define DATA_DIR       /tmp
#endif

char commonDataDir[] = QUOTE(DATA_DIR);
于 2010-10-18T13:13:14.417 に答える
2

Code :: BlocksProjectビルドオプション->コンパイラ設定->#defines

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

(これは単なる推測ではなく、私が定期的に行っていることです)

于 2010-11-26T23:50:26.143 に答える
0

文字列全体をで囲む必要があります"

-DDATA_DIR="\"/media/Shared/SiX/Data\""
           ^                          ^
于 2010-10-18T13:05:53.997 に答える
0

これで修正されるようです。

g++ -DDATA_DIR='"/media/Shared/SiX/Data"' ...
于 2010-10-18T13:08:33.163 に答える
0

-DDATA_DIR=\"/media/Shared/SiX/Data\"現在のプロジェクトのmakeファイル内に似た行を使用しただけで、問題なく機能しました。(シングルバックスラッシュとダブルクォート。)

環境:

> 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)
于 2018-04-25T21:53:36.127 に答える