0
默認情況下,GNU C/C++編譯器首先查找包含-I
指定的目錄,然後包含在標準系統目錄中。GNU C/C++編譯器更改包括搜索順序
如何強制編譯器反轉搜索順序?
目前我正在調用編譯器的選項-nostdinc
set,它表示編譯器不在標準系統目錄內搜索頭文件。然後,我在之前使用-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.
有關信息,我的單元測試看起來此刻這樣的:
#include "gmock/gmock.h"
class TestDummy : public ::testing::Test
{
public:
TestDummy() {}
};
TEST_F(TestDummy, ShouldFail)
{
ASSERT_TRUE(false);
}
通過顛倒順序一切編譯罰款:
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.
也許選項['-isystem'](https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html)可以幫到你。 – piwi
使用''表示系統(_e.g._標準庫_和外部依賴項不是您特定項目_的一部分)標頭和用於非系統(_e.g._項目)標頭的「頭」。要添加系統頭文件路徑,使用'-isystem'作爲@piwi提到的。 –
You
這對我來說不起作用。我必須在Cygwin中爲嵌入式操作系統的某些驅動程序構建單元測試。所以嵌入式操作系統的''被視爲Cygwin的頭文件,這是錯誤的,甚至不會被發現。 –
lucab0ni