乾貨:pkg-config工具在實際工程中的用法
阿新 • • 發佈:2019-02-09
在如今這個開源的環境裡,想要開發某個功能,我們都會下意識的上網搜尋有沒有開源庫,如果有開源庫,那麼好,下載下來給它編譯好,使用。但是在使用過程中,你是否遇到不知如何將第三方庫編譯,連結到自己的工程中?怎麼改makefile就是改不好?是否看到開源庫lib/中pkgconfig資料夾,想都沒想這是幹什麼用的,開啟.pc檔案也不知所云?那麼好,今天我就總結下開源庫中pkgconfig資料夾中.pc檔案的作用,以及如何用pkg-config工具將開源庫整合到自己的工程中去。
1、pkg-config工具的作用
pkg-config簡單的說就是向用戶提供相應庫的路徑,版本號,標頭檔案路徑等資訊的綜合呼叫程式。筆者使用的是Ubuntu系統,我們以OpenEXR庫為例看看pkg-config執行的結果,在shell命令列輸入:
顯示資訊為:-I/usr/include/OpenEXR -lIlmImf -lImath -lHalf -lIex -lIexMath -lIlmThread -lpthread 這是什麼呀? -I/usr/include/OpenEXR 這不就是我們用gcc編譯時的CFLAGS引數嗎? -lIlmImf -lImath -lHalf -lIex -lIexMath -lIlmThread -lpthread這些不就是gcc在連結時使用的LDFLAGS引數嗎? 因此當我們需要在自己的工程中編譯連結時只需要合理的使用pkg-config工具,把上面那些引數加入到gcc的引數裡即可,這個就是pkg-config工具的核心作用,它會檢查你的庫,產生相應資訊,為你整合某個第三方庫提供便利。
2、*.pc檔案解析
我們知道,第三方庫的使用主要涉及標頭檔案的路徑設定,庫的路徑設定以及動態庫的環境變數設定。一般來講,第三方庫都會提供一個
顯示資訊為:-I/usr/include/OpenEXR -lIlmImf -lImath -lHalf -lIex -lIexMath -lIlmThread -lpthread 這是什麼呀? -I/usr/include/OpenEXR 這不就是我們用gcc編譯時的CFLAGS引數嗎? -lIlmImf -lImath -lHalf -lIex -lIexMath -lIlmThread -lpthread這些不就是gcc在連結時使用的LDFLAGS引數嗎? 因此當我們需要在自己的工程中編譯連結時只需要合理的使用pkg-config工具,把上面那些引數加入到gcc的引數裡即可,這個就是pkg-config工具的核心作用,它會檢查你的庫,產生相應資訊,為你整合某個第三方庫提供便利。
*.pc
檔案,pkg-config程式通過讀取這個*.pc
的檔案,獲取了庫的標頭檔案位置和庫的路徑等資訊,然後告知編譯器,實現庫的自動使用。一般來說,*.pc
檔案的大體內容如下格式(以筆者最近使用的SQLite3為例):
其中,
-
prefix
一般是指定庫的預設安裝路徑 -
exec_prefix
一般是指庫的另外指定的安裝路徑 -
inludedir
指定庫的標頭檔案路徑 -
libdir
指定庫的lib檔案的路徑 -
Name
指定庫的名稱,比如筆者使用的SQLite資料庫 -
Description
表示庫的描述 -
Version
是版本號 -
Cflags
是gcc連結標頭檔案的指令,以-I
緊接標頭檔案路徑設定 -
Libs
是gcc連結lib檔案的指令, 是-L
緊接lib檔案路徑,-l
緊接所使用的lib的名字。