【问题标题】:declare library dependency in meson not found by pkg-config and cmake在 pkg-config 和 cmake 找不到介子中声明库依赖项
【发布时间】:2020-08-09 12:16:15
【问题描述】:

这个问题与介子构建系统有关,特别是如何添加pkg-config和/或cmake找不到的外部依赖项(库)。这应该很简单,但似乎我遗漏了一些东西(很明显?!)。

假设我在自定义路径 /home/user/libraries/foo/lib/libfoo.a 的某处有一个静态库,并带有相应的包含目录 /home/user/libraries/foo/include/。由于 pkg-config 和/或 cmake 找不到这个库,所以做类似的事情

foo_dep = dependency('foo')
exe = executable('bar','bar.cpp', link_with: foo_dep)

不会工作。所以我想知道 meson 做事的方式是什么,即我应该使用declare_dependency()(虽然我认为这更适用于子项目),我应该使用-I 传递编译器和链接器标志吗?和-L -l 等(尽管这意味着指定可以手动维护的硬链接,这不是首选方式)还是有更好的方法来做到这一点?

【问题讨论】:

    标签: c++ meson-build


    【解决方案1】:

    您在编译器对象上使用find_library()has_header() 方法:https://mesonbuild.com/Reference-manual.html#compiler-object

    然后将它传递给你正在编译的任何东西。

    cxx = meson.get_compiler('cpp')
    libfoo = cxx.find_library('foo')
    executable('foo', 'foo.cpp',
      link_with: libfoo,
      include_directories: ..., # Using has_header() find this path
    )
    

    【讨论】:

    • 谢谢,我想我在某个地方遇到了这个解决方案,但因为它看起来更像是一个黑客而放弃了它。反正有道理,会用的。
    • 只是为了添加到该评论(在让它工作之后),link_with 仅用于内部依赖项(在我的情况下,我有一个外部依赖项,即位于/usr/local/)所以我必须使用依赖项而不是 link_with。不确定如何使用 has_header() (返回布尔值)找到包含目录,但检查标头是否存在仍然很有用
    猜你喜欢
    • 2020-11-05
    • 2019-01-10
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2022-09-26
    • 2013-02-13
    相关资源
    最近更新 更多