介子构建:手动添加可执行文件的依赖路径
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