天天看點

gcc 頭檔案搜尋路徑一、雙引号和尖括号引用頭檔案的差別二、-I 參數指定的路徑三、環境變量 C_INCLUDE_PATH 或 CPLUS_INCLUDE_PATH 包含的路徑四、内定路徑

文章目錄

  • 一、雙引号和尖括号引用頭檔案的差別
  • 二、-I 參數指定的路徑
  • 三、環境變量 C_INCLUDE_PATH 或 CPLUS_INCLUDE_PATH 包含的路徑
  • 四、内定路徑

本文涉及 gcc 的指令中,把 gcc 換成 g++ 同樣可以運作。

一、雙引号和尖括号引用頭檔案的差別

對于雙引号和尖括号包含的頭檔案的搜尋方式有細微差别,前者的搜尋路徑選擇先後為:使用

#include

的檔案所在的目前路徑,

-I

指定的路徑,環境變量

C_INCLUDE_PATH

CPLUS_INCLUDE_PATH

包含的路徑,内定路徑;而後者就隻有三種,依次是

-I

指定的路徑,環境變量

C_INCLUDE_PATH

CPLUS_INCLUDE_PATH

包含的路徑,内定路徑。下文着重介紹後者的那三種選擇:

  • -I

    參數指定的路徑;
  • 環境變量

    C_INCLUDE_PATH

    CPLUS_INCLUDE_PATH

    包含的路徑;
  • 内定路徑。

前兩種可由我們自己指定哪些路徑,第三種是 gcc 内置的,使用者改變不了。

二、-I 參數指定的路徑

-I

參數的用法為

gcc <filename> -I <pathname_1> -I <pathname_2>

,-I 後邊隻能緊跟一個路徑名,想要手動指定幾個頭檔案搜尋路徑,就得寫幾個

-I

gcc hello.c -I ~/mydir1 -I ~/mydir2
           

三、環境變量 C_INCLUDE_PATH 或 CPLUS_INCLUDE_PATH 包含的路徑

gcc 在搜尋完

-I

參數指定路徑後,便會檢視環境變量

C_INCLUDE_PATH

CPLUS_INCLUDE_PATH

包含的路徑,這兩個環境變量都是路徑的集合,我們可以手動往這兩個環境變量裡添加路徑。

C_INCLUDE_PATH

為例,添加路徑有兩種方法,如果該新增路徑隻是臨時需要,則可以在指令行輸入

echo C_INCLUDE_PATH=$C_INCLUDE_PATH:<pathname>

;如果是長期需要,則應在

~/.bashrc

/etc/profile

添加

export C_INCLUDE_PATH=​$C_INCLUDE_PATH:<pathname>

,然後儲存并退出檔案,在指令行中執行指令

source ~/.bashrc

source /etc/profile

四、内定路徑

第三種的内定路徑無法更改,但可以檢視,如何檢視呢?可先随便寫一個 C 檔案,然後在指令行執行指令

gcc <filename> -v

以顯示整個編譯過程。顯示内容有一行是

#include <...> search starts here:

,下邊顯示的路徑便是 gcc 内定的頭檔案搜尋路徑。筆者經過對 g++ 和 gcc 的指令測試,對内定的頭檔案搜尋目錄歸納如下。

# 編譯 C 檔案或 C++ 檔案時都會搜尋以下五個路徑
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/7/include
/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
/usr/include
/usr/include/x86_64-linux-gnu

# 編譯 C++ 檔案時才會搜尋以下三個路徑
/usr/include/x86_64-linux-gnu/c++/7 
/usr/include/c++/7
/usr/include/c++/7/backward