代码之家  ›  专栏  ›  技术社区  ›  sdgfsdh

依赖于子曲面兄弟的介子目标

  •  0
  • sdgfsdh  · 技术社区  · 7 年前

    .
    ├── include
    ├── src
    │   ├── abc
    │   │   ├── include
    │   │   └── src
    │   ├── def
    │   │   ├── include
    │   │   └── src
    │   └── ghi
    │       ├── include
    │       └── src
    └── vendor
        ├── bar
        │   ├── include
        │   └── src
        └── foo
    
    16 directories
    

    我想将我的构建移植到介子。但是,我不确定如何链接同级文件夹中定义的目标。

    • src/abc/meson.build 定义一个静态库 abc
    • src/def/meson.build def abc foo
    • src/ghi/meson.build 定义一个静态库 ghi 这取决于 bar
    • vendor/bar/meson.build 定义一个静态库
    • vendor/foo/meson.build 福
    • 高层 meson.build 定义可执行文件 app abc , def 和 ghi

    在文件中,似乎有两种机制:

    • subdir
    • subproject

    我应该在我的字典里写什么 介子结构 将这些目标链接在一起的文件?

    0 回复  |  直到 7 年前
        1
  •  2
  •   sdgfsdh    7 年前

    subdir 从顶层 meson.build 归档。在子目录中声明的所有变量 介子结构 细分

        2
  •  1
  •   rellenberg    7 年前

    除了@sdgfsdh(正确)的答案外,我喜欢的另一种方法是仅在顶级介子文件中定义库和可执行文件,并使用subdir调用定义一组源文件和“本地”包含路径。通过这种方式,子目录文件不会隐式地相互依赖;整个依赖关系树位于顶级介子文件中。

    • 子目录不需要知道自己的路径(files()和include_directories()将为您跟踪此路径)
    • 顶级文件只需要知道subdir路径即可调用subdir介子文件。之后,您可以根据在子目录中创建的变量定义所有内容

    缺点:

    • 顶层文件比较混乱

    您的案例示例如下:

    # Top-level meson.build
    subdir('src/abc')
    subdir('src/def')
    subdir('src/ghi')
    subdir('vendor/foo')
    subdir('vendor/bar')
    
    libabc = static_library('abc', abc_files, include_directories: abc_includes)
    
    libabc_dep = declare_dependency(include_directories: abc_includes, link_with : libabc)
    
    libfoo = static_library('foo', foo_files, include_directories: foo_includes)
    
    libfoo_dep = declare_dependency(include_directories: foo_includes, link_with : libfoo)
    
    libdef = library('def', def_files, include_directories: def_includes, dependencies : [ libabc_dep, libfoo_dep])
    
    # src/abc/meson.build (others would be similar)
    abc_files = files(['1.c','2.c',...])
    abc_includes = include_directories('include')