2016-03-21 4 views
0

producttestという2つのディレクトリがあるとします。gccの現在のパスの下にあるヘッダを除外する方法

./test 
./test/test_product.cpp 
./test/foo.h 
./product 
./product/product.cpp 
./product/product.h 
./product/foo.h 

そしてproduct.cppとしてfoo.hを含める:デフォルトの動作は/product/foo.hを含めることです

#include "foo.h" 

。 ただし、製品ディレクトリに変更を加えずにを/product/product.cppに含めたいとします。 これを行う方法はありますか?どうもありがとう!

答えて

1

あなたはGCCの検索パスを追加することができますプリプロセッサを使用して、-Iオプション付きのヘッダーファイルを検索し、ファイルを含めるときに角カッコを使用すると、プリプロセッサはソースファイルと同じディレクトリ内のファイルを最後に探します。

-Itestを追加して、インクルードファイル検索パスにtestディレクトリを追加します。代わりに#include <foo.h>を使用してください。 product/foo.hを代わりに使用する場合は、-Itestオプションを削除し、代わりに-Iproductを追加してください。


条件付きコンパイルsolution suggested by Lantingを関与別の方法もあります。

あなたは-Dオプション使用して、コマンドライン上で行うことができるマクロTEST、定義された後test/foo.hを構築するために

#ifdef TEST 
# include "../test/foo.h" 
#else 
# include "foo.h" 
#endif 

:ちょうどそうTESTをオプションを削除

$ gcc -DTEST ... 

product/foo.hを使用するには、noです長い定義。

+0

回答ありがとうございます!残念ながら、私は製品のソースコードを変更することはできません。だから私は他の方法がありますか? – walker

+1

@walker http://stackoverflow.com/a/3164874/2422450で提供されているメソッドは、ソースを変更しません(しかし、コンパイルされたヘッダーではかなり複雑なものになります) – Lanting

0

#includeの下にパスを指定すると、ファイルにヘッダーを含めることができます。 ex。 # "ファイルへのパス"

関連する問題