デフォルトでは、GNU C/C++コンパイラは、最初に-I
で指定されたディレクトリにインクルードしてから、標準のシステムディレクトリ内にインクルードします。GNU C/C++コンパイラには検索順序が含まれています
コンパイラで検索順序を逆にするにはどうすればよいですか?
現時点では、コンパイラが標準システムディレクトリ内のヘッダファイルを検索しないと言う-nostdinc
オプションを指定してコンパイラを呼び出しています。次に、標準システムディレクトリに-I
を渡してから、の前にすべてを含めます。
これを実現する方法はありますか?たぶんコンパイラオプション?
UPDATE:ユーザーが尋ねたよう、私はTMY質問をより明確にするためにここにいくつかの追加情報を追加します。
私は図のセットアップと私は、コンパイラの検索パスの順序を逆しなければならない理由を理解するのに役立つことを願っています。
私はユニットテストのソースファイル
最後にCPPFLAGS = -c -std=gnu++11 -v -g -O0 -pipe -Wall -MMD -MP -D__STDC_LIMIT_MACROS
TEST_INCLUDE_PATH = -I$(GMOCK_DIR)/include -I$(GMOCK_DIR)/gtest/include -I$(ECOS_INSTALL_DIR)/include
コンパイルしようとすると:
gcc $(CPPFLAGS) $(TEST_INCLUDE_PATH)
を、私はエラーの多くを得ました。コンパイラのインクルード順序をチェックすることで、コンパイラは、間違ったディレクトリ(この場合はeCos)内のいくつかのシステムヘッダファイルのヘッダファイルを見つけ出します。詳細については
#include "..." search starts here:
#include <...> search starts here:
../../../../Common/Implementation/TestLibraries/gmock-1.7.0/include
../../../../Common/Implementation/TestLibraries/gmock-1.7.0/gtest/include
../../Implementation/Build/eCos_install/include
/usr/lib/gcc/i686-pc-cygwin/5.4.0/include/c++
/usr/lib/gcc/i686-pc-cygwin/5.4.0/include/c++/i686-pc-cygwin
/usr/lib/gcc/i686-pc-cygwin/5.4.0/include/c++/backward
/usr/lib/gcc/i686-pc-cygwin/5.4.0/include
/usr/include
/usr/lib/gcc/i686-pc-cygwin/5.4.0/../../../../include/w32api
End of search list.
、私のユニットテストは、そのような瞬間になります
最後にCPPFLAGS = -c -std=gnu++11 -v -g -O0 -pipe -Wall -MMD -MP -D__STDC_LIMIT_MACROS -nostdinc
SYSTEM_INCLUDE_PATH = -I$(GCC_CYGWIN_PATH)/include/c++ ....
TEST_INCLUDE_PATH = -I$(GMOCK_DIR)/include -I$(GMOCK_DIR)/gtest/include -I$(ECOS_INSTALL_DIR)/include
:
gcc $(CPPFLAGS) $(SYSTEM_INCLUDE_PATH) $(TEST_INCLUDE_PATH)
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/i686-pc-cygwin/5.4.0/include/c++
/usr/lib/gcc/i686-pc-cygwin/5.4.0/include/c++/i686-pc-cygwin
/usr/lib/gcc/i686-pc-cygwin/5.4.0/include/c++/backward
/usr/lib/gcc/i686-pc-cygwin/5.4.0/include
/usr/include
/usr/lib/gcc/i686-pc-cygwin/5.4.0/../../../../include/w32api
../../../../Common/Implementation/TestLibraries/gmock-1.7.0/include
../../../../Common/Implementation/TestLibraries/gmock-1.7.0/gtest/include
../../Implementation/Build/HostMCU_icb_jtag_install/include
End of search list.
注文すべてが正常にコンパイル反転し
#include "gmock/gmock.h"
class TestDummy : public ::testing::Test
{
public:
TestDummy() {}
};
TEST_F(TestDummy, ShouldFail)
{
ASSERT_TRUE(false);
}
['-isystem'](https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html)のオプションが役立つかもしれません。 – piwi
非システム(_e.g._プロジェクト)ヘッダーのシステム(_e.g._標準ライブラリ_および特定のプロジェクトの一部ではない外部依存関係)には ''を、ヘッダーには ''ヘッダー」を使用します。システムヘッダのパスを追加するには、 '-isystem'を@piwiとして使用します。 – You
それは私の場合は動作しません。組み込みOSのドライバの中には、Cygwinで単体テストを構築する必要があります。したがって、組み込みOSの ''はCygwinのヘッダファイルと見なされますが、これは間違っていて見つからないことさえあります。 –
lucab0ni