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。名稱 prefixlibdirincludedir 為保留名稱,不得使用。從 0.56.0 開始,它也可以是字典,但 Meson 字典的順序不保證,如果某些變數參考其他變數,可能會導致問題。值中的空格會使用 \ 跳脫,如果該值是路徑,且在 cflagslibs 引數中使用時,這是必要的。從 0.59.0 開始,如果不希望跳脫(例如,以空格分隔的值清單),則應改用 unescaped_variables 關鍵字引數。從 0.62.0 開始,預設會自動建立參考的內建目錄變數。
  • uninstalled_variables:在產生未安裝的 pkg-config 檔案時,取代 variables 關鍵字引數。從 0.54.0 開始,值中的空格會使用 \ 跳脫,如果該值是路徑,且在 cflagslibs 引數中使用時,這是必要的。從 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 開始,可以選擇性地將 StaticLibrarySharedLibrary 物件作為第一個位置引數傳遞。如果提供一個,則會為 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:),除非它們在 librariesrequires 關鍵字引數中明確新增,或者是主要函式庫(第一個位置引數)。
  • 函式庫和相依性將會重複資料刪除,如果它們同時新增到公用和私有(例如,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_argslink_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 模組選項

搜尋結果為