如何指定GCC的預設標頭檔案路徑(非常有用)

2021-06-05 10:23:23 字數 3096 閱讀 6741

在交叉編譯的時候我們需要用到其他的庫,在config時候可以通過「-i」來指定頭檔案目錄,但是每次都需要設定的話難免有些麻煩,找到乙個簡單的方法。看下文的紅色部分。

有大量的環境變數可供設定以影響 gcc 編譯程式的方式。利用這些變數的控制也可使用合適的命令列選項。一些環境變數設定在目錄名列表中。這些名字和 path 環境變數使用的格式相同。特殊字元 path_separator (安裝編譯程式的時候定義)用在目錄名之間。在 unix 系統中,分隔符是冒號,而 windows 系統中為分號。

c_include_path

編譯 c 程式時使用該環境變數。該環境變數指定乙個或多個目錄名列表,查詢標頭檔案,就好像在命令列中指定 -isystem 選項一樣。會首先查詢 -isystem 指定的所有目錄。

也見 cpath 、 cplus_include_path 和 objc_include_path 。

compiler_path

該環境變數指定乙個或多個目錄名列表,如果沒有指定 gcc_exec_prefix 定位子程式,編譯程式會在此查詢它的子程式。

也見 library_path 、 gcc_exec_prefix 和 -b 命令列選項。

cpath 編譯 c 、 c++ 和 objective-c 程式時使用該環境變數。該環境變數指定乙個或多個目錄名列表,查詢標頭檔案,就好像在命令列中指定 -l 選項一樣。會首先查詢 -l 指定的所有目錄。

也見 c_include_path 、 cplus_include_path 和 objc_include_path 。

cplus_include_path 編譯 c++ 程式時使用該環境變數。該環境變數指定乙個或多個目錄名列表,查詢標頭檔案,就好像在命令列中指定 -isystem 選項一樣。會首先查詢 -isystem 指定的所有目錄。

也見 cpath 、 c_include_path 和 objc_include_path 。

dependencies_output 為檔名設定該環境變數會讓預處理程式將基於依賴關係的 makefile 規則寫入檔案。不會包括系統標頭檔案名字。

如果環境變數設定為單名,被看作是檔案名字,而依賴關係規則的名字來自原始檔名字。如果定義中有兩個名字,則第二個名字是用作依賴關係規則的目標名。

設定該環境變數的結果和使用命令列選項 -mm 、 -mf 和 -mt 的組合是一樣的。也見 sunpro_dependencies 。

gcc_exec_prefix 如果定義了該環境變數,它會作為編譯程式執行的所有子程式名字的字首。例如,如果將變數設定為 testver 而不是查詢 as ,彙編器首先會在名字testveras 下查詢。如果在此沒有找到,編譯程式會繼續根據它的普通名進行查詢。可在字首名中使用斜線指出路徑名。

gcc_exec_prefix 的預設設定為 prefix /lib/gcc-lib/ ,這裡的 prefix 是安裝編譯程式時 configure 指令碼指定的名字。該字首也用於定位標準連線程式檔案,包含進來作為可執行程式的一部分。

如果使用 -b 命令列選項,會重寫該設定。也見 compiler_path 。

lang 該環境變數用於指出編譯程式使用的字符集,可建立寬字元文字、串文字和注釋。

定義 lang 為 c-jis ,指出預處理程式將多位元組字元按照 jis (日語工業標準)字元進行解釋。 c-sjis 可用來指出 shift -jis 字元而 c-eucjp 指出日文 euc 。

如果沒有定義 lang ,或定義為不可識別,函式 mblen() 被用來確定字元寬度,而 mbtowc() 用來將多位元組序列轉換為寬字元。

lc_all 如果設定,該環境變數的值重寫 lc_messages 和 lc_ctype 的所有設定。

lc_ctype 該環境變數指出引用串中定義的多位元組字元的字元分類。主要用於確定字串的字元邊界,字元編碼需要用引號或轉義符,可被錯誤地解釋為字串的結尾或特殊字串。對 australian english ,可將它設定為 en_au ; 對 mexican spanish ,可將它設定為 es_mx。如果沒有設定該變數,預設為 lang 變數的值,或如果沒有設定 lang ,那就使用 c 英語行為。也見 lc_all 。

lc_messages 該環境變數指出編譯程式使用何種語言發出診斷訊息。對 australian english ,可設定為 en_au ;對 mexicanspanish ,可設定為 es_mx 。如果變數沒有設定,使用 lang 變數的預設值,或如果沒有設定 lang ,那就使用 c英語行為。也見 lc_all 。

ld_library_path 該環境變數不會影響編譯程式,但程式執行的時候會有影響。變數指定乙個目錄列表,程式會查詢該列表定位共享庫。只有當未在編譯程式的目錄中找到共享庫的時候,執行程式必須設定該變數。

ld_run_path 該環境變數不會影響編譯程式,但程式執行的時候會有影響。該變數在執行時指出檔案的名字,執行的程式可由此得到它的符號名字和位址。位址不會重新載入,因而可能符號引用其他檔案中的絕對位址。這和 ld 工具使用 -r 選項完全一樣。

library_path 該環境變數可設定為乙個或多個目錄名字列表,連線程式會搜尋該目錄,以查詢特殊連線程式檔案,和由 -l (字母l )命令列選項指定名字的庫。

由 -l 命令列選項指定的目錄在環境變數的前面,首先被查詢。也見 compiler_path 。

objc_include_path 在編譯 objective-c 程式的時候使用該環境變數。乙個或多個目錄名的列表由環境變數指定,用來查詢標頭檔案,就好像在命令列中指定 -isystem 選項一樣。所有由 -isystem 選項指定的目錄會首先被查詢。

也見 cpath 、 cplus_include_path 和 c_include_path 。

sunpro_output 為檔名設定該環境變數會令預處理程式將基於依賴關係的 makefile 規則寫入檔案。會包含系統頭檔名。

如果環境變數被設定為單個名字,它將會被當作檔名,依賴關係規則中的名字將由原始檔的名字中獲得。如果定義中有兩個名字,第二個名字就是依賴關係規則中的目標名。

設定該環境變數的結果與在命令列中使用引數 -m 、 -mf 和 -mt 的效果一樣。參見 dependencies_output 。

tmpdir 這個變數包含了供編譯程式存放臨時工作檔案的目錄的路徑名。這些檔案通常在編譯過程結束時被刪除。這種檔案的乙個例子就是由預處理程式輸出並輸入給編譯程式的檔案。

gcc指定標頭檔案路徑及動態鏈結庫路徑

include 直接到系統指定的某些目錄中去找某些標頭檔案。include 先到原始檔所在資料夾去找,然後再到系統指定的某些目錄中去找某些標頭檔案。1.會在預設情況下指定到 usr include資料夾 更深層次的是乙個相對路徑,gcc可執行程式的路徑是 usr bin gcc,那麼它在實際工作時指...

gcc指定標頭檔案及動態鏈結庫路徑

在利用源 進行軟體編譯的過程中,經常會出現以下錯誤 include 直接到系統指定的某些目錄中去找某些標頭檔案。include 先到原始檔所在資料夾去找,然後再到系統指定的某些目錄中去找某些標頭檔案。那麼gcc如何確定標頭檔案搜尋路徑呢?q 檔案路徑有多種,那麼先後順序如何?i 指定的路徑 gcc ...

CMAKE 預設標頭檔案路徑問題

如果在cmake配置中 include directories home ll home ll中的標頭檔案查詢優先順序高於系統預設目錄 usr include和 usr local include 即使增加 系統預設的搜尋標頭檔案的目錄隨選擇的c c 編譯器而變化 交叉編譯例項 cmake mini...