2017-01-17 7 views
1

コンパイル時にCインクルードファイルの名前をCフラグとして指定したいと思います。gccプリプロセッサを使って#includeのファイル名を定義する

#include MY_INCLUDE_FILE 
int main(int argc, const char * argv[]) {...} 

私が展開する文字列化演算子#を使用しようとしただけでこのようなエラーを得ているこの

gcc -DMY_INCLUDE_FILE="some_incfile.h" main.c 

のようなものをやって

#include "some_incfile.h" 
int main(int argc, const char * argv[]) {...} 

にプリプロセッサによってexpanedだろうas error: expected "FILENAME" or <FILENAME>

これも可能ですか?定義 -Dは、重要な部分には、ファイル名はgccのコマンドラインから設定することができるということである、全く必要ありません

+1

アイデアは良いですが、問題は引用符のシェル拡張です –

答えて

5

あなたは「エスケープする必要があります。

gcc -DMY_INCLUDE_FILE=\"some_incfile.h\" main.c 
+0

これは簡単です。もちろん、 ""をエスケープするために記憶しておく必要があります。これはうまく動作し、私はそれが受け入れられた答えです。 – bits

1

-includeオプションを使用し

gcc -include "somefile.h" main.c 
+0

私が求めているのは正確ではありませんが、おそらくよりエレガントな方法でも同様にうまく解決します。 – bits

1

あなたはそれをその

# if defined AAA 
#define INC "x.h" 
#elif defined BBB 
#define INC "y.h" 
#endif 

#include INC 

ような何かを行うことができますし、コマンドラインからgcc -DAAAを実行します。など

と、ファイルが本当に無作為のmakefileにより、外部から生成されている場合はもちろん、あなたが直接gcc -DINC="\"FILE.h\""を渡すことができ、

重要なのは、マクロ展開の手順で有効なファイル名に評価すべきINC(参照ですProsserのアルゴリズム)。

関連する問題