为什么pkg-config用另一个默认前缀覆盖“ prefix”?

时间:2018-09-21 09:19:13

标签: x264 msys2 pkg-config

在使用pkg-config将某些库链接到程序时遇到问题。问题是每个库中的“前缀”变量pkg-config文件(* .pc)被不需要的目录覆盖,导致构建程序找不到库的头文件和lib文件。

在这里,其中一个* .pc文件x264.pc:

prefix=/e/x264/x64-windows-rel  
exec_prefix=${prefix}   
libdir=${exec_prefix}/lib   
includedir=${prefix}/include    
...

我从MSYS2终端运行它:

pkg-config --cflags --debug x264

这是它跟踪的一些输出:

...
 Parsing package file 'D:/msys64/usr/local/lib/pkgconfig\x264.pc'
 line>prefix=/e/x264/x64-windows-rel
 Variable declaration, 'prefix' overridden with 'D:/msys64/usr/local'
...

请注意,MSYS2和pkg-config已更新为最新版本。

有人可以告诉我为什么会发生这种情况,以及如何在不将“前缀”重命名为其他名称的情况下解决该问题。 谢谢。

1 个答案:

答案 0 :(得分:1)

看起来您的pkg-config是使用--enable-define-prefix选项编译的(对于Windows目标,它看起来像默认值),而.pc文件位于名称为pkgconfigD:/msys64/usr/local/lib/pkgconfig\x264.pc)的目录中。顺便问一下,为什么.pc文件安装在D:/msys64/usr/local/lib/pkgconfig中,而库却安装在其他地方?

这是pkg-config手册页上的引文:

    --define-prefix
          --dont-define-prefix  These  options  control whether pkg-config
          overrides the value of the variable prefix  in  each  .pc  file.
          With  --define-prefix, pkg-config uses the installed location of
          the .pc file to determine the prefix. --dont-define-prefix  pre-
          vents this behavior. The default is usually --define-prefix.

          When this feature is enabled and a .pc file is found in a direc-
          tory named pkgconfig, the prefix for that package is assumed  to
          be  the  grandparent  of the directory where the file was found,
          and the prefix variable is overridden for that file accordingly.

          If  the value of a variable in a .pc file begins with the origi-
          nal, non-overridden, value of  the  prefix  variable,  then  the
          overridden value of prefix is used instead. This allows the fea-
          ture to work even when the variables have been expanded  in  the
          .pc file.

因此,您可以通过--dont-define-prefix选项禁用此行为。

pkg-config manual page (source code)

pkg-config manual page (rendered)

P.S。 MSYS2具有很少的pkg-config软件包。您应该使用mingw64/mingw-w64-x86_64-pkg-configmingw32/mingw-w64-i686-pkg-config。请勿使用msys/pkg-config