MesonBuild: How to define dependency to a library that cannot be found by `pkg-config`?

后端 未结 2 1495
遇见更好的自我
遇见更好的自我 2021-02-13 09:26

My project (in C) has a third party dependency at build time. But the third party library is, by default, installed to /opt/ instead of /lib, and I can

相关标签:
2条回答
  • 2021-02-13 10:17

    Refer to meson object here : current_source_dir() method returns a string to the current source directory.

    Use it for the case libhello.so and libhello.h are located in <workspace>/hello directory

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

    In <workspace>/hello/meson.build:

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

    In <workspace>/meson.build:

    project('myproj', 'c')
    subdir('hello')
    
    inc_hello = include_directories('./')
    exec = executable('app',
                      'main.c',
                      dependencies : [lib_hello],
                      include_directories : inc_hello)
    
    
    0 讨论(0)
  • 2021-02-13 10:20

    As documented here and here

    The main use case for this [declare_dependency()] is in subprojects.

    and

    [dependency()] finds an external dependency ... with pkg-config [or] library-specific fallback detection logic ...

    You can, instead, use find_library() provided by the compiler object and include_directories() . find_library() returns an object just like the one declare_dependency() returns. include_directories() returns an opaque object which contains the directories.

    Assuming you are using a C compiler and your 3rd party library and its header file are /opt/hello/libhello.so and /opt/hello/hello.h, you can do:

    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)
    
    0 讨论(0)
提交回复
热议问题