介子构建:手动添加可执行文件的依赖路径

Posted

技术标签:

【中文标题】介子构建:手动添加可执行文件的依赖路径【英文标题】:Meson build: Add dependency path for executable manually 【发布时间】:2018-12-04 11:07:08 【问题描述】:

我想做的事情相当简单:使用 Meson 构建系统编译项目 + 手动包含依赖项。

但是,由于 Mac 上的系统完整性保护,有一个依赖项,我不想安装到 /usr/lib。 (我知道我可以关闭它;我不想这样做。)

所以基本上我想做: g++ -L[path_to_lib] [files...] 但使用 meson 而不是 g++

但是,这似乎非常复杂。在做了一些研究并没有成功添加 cc = meson.get_compiler('c') dep = cc.find_library('granite' dirs: [ [path_to_dep] ]) 到我的 meson.build 文件(不起作用,因为它处理库,而不是依赖项) 我感觉很愚蠢。

请帮忙!

我知道我可以将相关路径添加到 $PATH,但这太过分了,我拒绝相信没有其他好的快速方法可以做到这一点。 (与古老的 c 编译器一样......)

【问题讨论】:

【参考方案1】:

您应该能够在不修改 meson.build 文件的情况下解决您的问题(我的意思是让花岗岩作为普通依赖项)。 meson 使用 pkg-config 搜索依赖项,因此如果您将包含花岗岩包配置文件的非标准路径添加到 PKG_CONFIG_PATH,它将找到它。在这种情况下,granite 包配置文件当然应该是正确的,即包含正确的库和头文件路径,如果您 configure installation 的花岗岩具有以下内容,则应该是正确的:

# Configure:
$ cmake -DCMAKE_INSTALL_PREFIX=/some/path...
# Build:
$ make
# Install (need sudo?):
$ make install

$ export PKG_CONFIG_PATH=/some/path...:$PKG_CONFIG_PATH

granite_dep = dependency('granite')
my_app = executable('my_app',
  dependencies : [granite_dep]
  ...

但是,请注意,如果 find_library() 根据reference manual:

结果对象可以像依赖的返回值一样使用

所以,它应该可以工作:

granite_dep = cc.find_library('granite', dirs : [path])
executable(..., dependencies : granite_dep)

但是,我推荐使用 pkg-config 的标准方式,因为 Granite 也可能具有您无法通过这种方式自动获取的依赖项。

【讨论】:

以上是关于介子构建:手动添加可执行文件的依赖路径的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在另一个项目中添加一个可执行的 jar 文件作为依赖项吗?

为啥在构建依赖库之前没有开始编译目标可执行文件?

使用介子/忍者构建需要多次执行才能完成

C++ Windows - 通过可执行文件路径获取进程的 PID

没有依赖关系的 Spring Boot 可执行 Jar 文件

pyenv下python依赖的路径和打包项目