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

带介子和本征子的文件路径问题

  •  0
  • Pietro  · 技术社区  · 6 年前

    #include </cygdrive/c/Users/user/project/Third-Party/eigen/Eigen/Dense>
    

    这一条没有:

    #include "Third-Party/eigen/Eigen/Dense"
    

    致命错误:Eigen/Dense:没有这样的文件或目录

    在介子构建文件中,我尝试添加Eigen的路径,但没有成功:

    # '.' will refer to current build directory
    include_dirs = include_directories('include', '.', '../project/Third-Party/eigen')
    

    project
       meson.build
       src
          meson.build
          example.h
          example.cpp
       Third-Party
          eigen  (headers only lib)
             Eigen
    

    1 回复  |  直到 6 年前
        1
  •  3
  •   barsoosayque    6 年前

    include_directories() dependency() 指挥部。

    依赖项() 是处理依赖关系的更好方法,因为介子将在必要时构建它(如果依赖关系是共享库或静态库),并且 安全地 meson.build 文件

    使用

    要真正使用它,你必须 write a wrap file Wrap DB --介子包裹文件的社区驱动数据库。Wrap file是一种配置,它声明在哪里可以获得依赖项以及依赖项的形式。包装文件可以包装zip存档和git存储库。

    对于给定的依赖项,wrap DB中有wrap文件: eigen subprojects 在你家附近的目录 . 例如:

    $ cd project
    $ mkdir subprojects
    $ wget "https://wrapdb.mesonbuild.com/v1/projects/eigen/3.3.4/1/get_wrap" \
      -O subprojects/eigen.wrap
    

    补丁 . 修补程序仅用于复制适当的 介子结构

    声明 本身作为依赖项(使用 declare_dependency() 命令),您需要进行调查 介子结构 依赖源目录中的文件(尽管它通常只是 依赖项的名称 目录是 subprojects/eigen-eigen-5a0156e40feb . 那么,您搜索 命令:

    $ grep declare_dependency subprojects/eigen-eigen-5a0156e40feb/meson.build
    eigen_dep = declare_dependency(
    

    eigen_dep 确切地 声明,只需向下滚动依赖项 介子结构 文件

    现在,用这个 本征dep 依赖项() Eigen: Getting Started :

    project('example', 'cpp')
    eigen_dependency = dependency('eigen', fallback: ['eigen', 'eigen_dep'])
    executable('example', 'example.cpp', dependencies: eigen_dependency) 
    

    依赖项() 指挥部。第一个是介子正在寻找的全系统依赖性。如果没有 本征 退路 :回退中的第一项是包装文件的basename,第二项是声明的依赖项的名称。

    然后使用 eigen_dependency 论点

    使用 包含目录()

    如果您只想包含来自外部目录(例如“第三方”目录)的一些文件,请使用 包含目录() 命令,则该目录必须相对于 介子结构

    要使用手动声明的包含,您需要调用 包含目录() include_directories 无论你构建什么,都要进行论证。

    举个例子,我假设根 文件是一个项目生成文件。那么在那根 介子结构

    # File: project/meson.build
    project('example', 'cpp')
    eigen_includes = include_directories('Third-Parties/eigen')
    executable('example', 'example.cpp', include_directories: eigen_includes)
    

    但是如果你想从中得到本征包含 src/meson.build ,那么你需要改变 致:

    # File: project/src/meson.build
    eigen_includes = include_directories('../Third-Parties/eigen')
    ...