Pkgconfig 模組
此模組是一個簡單的 pkg-config 檔案產生器。
用法
pkg = import('pkgconfig')
bar_dep = dependency('bar')
lib = library('foo', dependencies : [bar])
pkg.generate(lib)
pkg.generate()
產生的檔案屬性會以以下關鍵字引數指定。
-
description
:描述函式庫的字串,用於設定Description:
欄位 -
extra_cflags
:要新增至Cflags
欄位(標頭搜尋路徑之後)的額外編譯器旗標清單 -
filebase
:用於 pkg-config 檔案的基本名稱;例如,libfoo
的值會產生一個名為libfoo.pc
的 pkg-config 檔案 -
install_dir
:要安裝到的目錄,預設為選項libdir
的值,後接/pkgconfig
-
libraries
:使用者需要連結的已建置函式庫清單(通常是 shared_library 的結果)。也可以提供任意字串,它們將被新增到Libs
欄位。從 0.45.0 開始,將自動新增已建置函式庫的相依性,請參閱下方的 隱含相依性 章節以了解確切規則。從 0.58.0 開始,只要它們是可連結的(具有已知的擴展名,如.a
、.so
等),就支援 custom_target() 物件。 -
libraries_private
:要放入Libs.private
欄位的已建置函式庫或字串清單。從 0.45.0 開始,將自動新增已建置函式庫的相依性,請參閱下方的 隱含相依性 章節以了解確切規則。從 0.58.0 開始,只要它們是可連結的(具有已知的擴展名,如.a
、.so
等),就支援 custom_target() 物件。 -
name
:此函式庫的名稱,用於設定Name:
欄位 -
subdirs
:應新增至標頭搜尋路徑的include
的哪些子目錄,例如,如果您將標頭安裝到${PREFIX}/include/foobar-1
中,則此引數的正確值將為foobar-1
-
requires
:字串、pkgconfig 相依性或pkgconfig.generate()
使用過的函式庫清單,用於放入Requires
欄位 -
requires_private
:與requires
相同,但用於Requires.private
欄位 -
url
:具有函式庫 URL 的字串 -
variables
:包含要新增至產生的檔案的自訂變數的字串清單。字串的格式必須為name=value
,並且可以參考其他 pkgconfig 變數,例如datadir=${prefix}/share
。名稱prefix
、libdir
和includedir
為保留名稱,不得使用。從 0.56.0 開始,它也可以是字典,但 Meson 字典的順序不保證,如果某些變數參考其他變數,可能會導致問題。值中的空格會使用\
跳脫,如果該值是路徑,且在cflags
或libs
引數中使用時,這是必要的。從 0.59.0 開始,如果不希望跳脫(例如,以空格分隔的值清單),則應改用unescaped_variables
關鍵字引數。從 0.62.0 開始,預設會自動建立參考的內建目錄變數。 -
uninstalled_variables
:在產生未安裝的 pkg-config 檔案時,取代variables
關鍵字引數。從 0.54.0 開始,值中的空格會使用\
跳脫,如果該值是路徑,且在cflags
或libs
引數中使用時,這是必要的。從 0.59.0 開始,如果不希望跳脫(例如,以空格分隔的值清單),則應改用unescaped_uninstalled_variables
關鍵字引數。 -
version
:描述此函式庫版本的字串,用於設定Version:
欄位。(從 0.46.0 開始)如果未指定,則預設為專案版本。 -
d_module_versions
:在編譯此 pkg-config 檔案參考的 D 來源時,使用的一系列模組版本旗標 -
dataonly
欄位。(從 0.54.0 開始)這用於也具有架構相關輸出的專案中,與架構無關的 pkg-config 檔案。 -
conflicts
:(從 0.36.0 開始,在 0.54.0 之前錯誤地發出警告)要放入Conflicts
欄位的一系列字串。
從 0.46 開始,可以選擇性地將 StaticLibrary
或 SharedLibrary
物件作為第一個位置引數傳遞。如果提供一個,則會為 pc 檔案的所有必要欄位提供預設值
-
install_dir
設定為與提供的函式庫相同位置的pkgconfig
資料夾。 -
description
設定為專案的名稱,後接函式庫的名稱。 -
name
設定為函式庫的名稱。
從 0.54.0 開始,也會產生未安裝的 pkg-config 檔案。它們位於 <build dir>/meson-uninstalled/
中。有時,在不需要將它們安裝到前綴中的情況下,針對 Meson 建置的函式庫建置專案很有用。為此,只需在建置應用程式之前設定 PKG_CONFIG_PATH=<builddir>/meson-uninstalled
。這會導致 pkg-config 優先使用這些 -uninstalled.pc
檔案,並從 Meson 建置目錄中尋找函式庫和標頭。這是一項盡力提供的實驗性功能,可能無法在所有使用案例中正常運作。
隱含相依性
用於尋找隱含新增到 pkg-config 檔案中的相依性的確切規則,隨著時間的推移而演變。以下是 Meson 0.49.0 中的規則,之前的版本可能具有略微不同的行為。
- 找不到的函式庫或相依性會被忽略。
- 函式庫和相依性預設為私有(即新增到
Requires.private:
或Libs.private:
),除非它們在libraries
或requires
關鍵字引數中明確新增,或者是主要函式庫(第一個位置引數)。 - 函式庫和相依性將會重複資料刪除,如果它們同時新增到公用和私有(例如,
Requires:
和Requires.private:
)中,將會從私有清單中刪除。 - 共享函式庫(即
shared_library()
且 不是library()
)只會將-lfoo
新增到Libs:
或Libs.private:
,但不會提取其相依性。這是因為相依性僅在靜態連結時才需要。 - 其他函式庫(即
static_library()
或library()
)會將-lfoo
新增到Libs:
或Libs.private:
,並將其相依性遞迴地新增到Libs.private:
或Requires.private:
。 - pkg-config 提供的相依性會新增到
Requires:
或Requires.private:
。如果在宣告該相依性時指定了版本,則也會寫入產生的檔案中。 - 執行緒相依性(即
dependency('threads')
)會將-pthread
新增到Libs:
或Libs.private:
。 - 內部相依性(即
declare_dependency(compiler_args : '-DFOO', link_args : '-Wl,something', link_with : foo)
)會將compiler_args
新增到Cflags:
(如果為公用),將link_args
和link_with
新增到Libs:
(如果為公用)或Libs.private:
(如果為私有)。 - 其他相依性類型會將其編譯器引數新增到
Cflags:
(如果為公用),並將連結器引數新增到Libs:
(如果為公用)或Libs.private:
(如果為私有)。 - 一旦使用
pkg.generate(mylib)
為函式庫產生 pkg-config 檔案後,後續對pkg.generate()
的任何呼叫,只要 mylib 出現,都會產生Requires:
或Requires.private
,而不是Libs:
或Libs.private:
。
可重定位的 pkg-config 檔案
預設情況下,pkg.generate
產生的檔案包含硬編碼的前綴路徑。為了使它們可重定位,提供了 pkgconfig.relocatable
內建選項。請參閱 Pkgconfig 模組選項。
搜尋結果為