MesonBuild:如何定义`pkg-config`找不到的库的依赖?

时间:2017-10-30 07:56:20

标签: c dependencies meson-build

我的项目(在C中)在构建时具有第三方依赖。但默认情况下,第三方库已安装到/opt/而不是/lib,我无法在pkg-config中找到它。从mesonbuild的文档中,我应该使用declare_dependency,我没有将其源代码视为我的子项目。如果我使用dependency()来定义它,我找不到正确的参数来定义自定义位置。

如何声明非标准第三方库的依赖关系?

2 个答案:

答案 0 :(得分:8)

记录在案herehere

  

此[declare_dependency()]的主要用例位于子项目中。

  

[dependency()]使用pkg-config [或]特定于库的回退检测逻辑找到外部依赖...

您可以使用compiler提供的find_library() 对象和include_directories()find_library()返回一个对象,就像返回一个declare_dependency()一样。 include_directories()返回一个包含目录的不透明对象。

假设您使用的是C编译器,而您的第三方库及其头文件是/opt/hello/libhello.so/opt/hello/hello.h,您可以这样做:

project('myproj', 'c')

cc = meson.get_compiler('c')
lib_hello = cc.find_library('hello',
               dirs : ['/opt/hello'])
inc_hello = include_directories('/opt/hello')
exec = executable('app',
                  'main.c',
                  dependencies : [lib_hello],
                  include_directories : inc_hello)

答案 1 :(得分:0)

引用meson对象here current_source_dir()方法将字符串返回当前源目录。

用于libhello.solibhello.h位于 <workspace>/hello目录

<workspace>/main.c
<workspace>/meson.build

<workspace>/hello/libhello.so
<workspace>/hello/libhello.h
<workspace>/hello/meson.build

<workspace>/hello/meson.build中:

lib_hello = cc.find_library('hello', dirs : meson.current_source_dir())

<workspace>/meson.build中:

project('myproj', 'c')
subdir('hello')

inc_hello = include_directories('./')
exec = executable('app',
                  'main.c',
                  dependencies : [lib_hello],
                  include_directories : inc_hello)