我想使用 Meson 构建一个新的 C++ 项目。我需要的第一件事是 Boost 库的依赖项。但是,尽管 Boost 库安装在我的 Arch 系统上(标头和库),Meson 抱怨它找不到它们。
这是介子构建文件:
project('myproj', 'cpp')
boost_dep = dependency('boost')
executable('myproj', 'main.cpp', dependencies : boost_dep)
源main.cpp
文件:
int main()
{
return 0;
}
我的系统上安装的一些 Boost 文件的部分列表:
$ ls /usr/lib/libboost*|head -n5; ls /usr/include/boost/*|head -n5
/usr/lib/libboost_atomic.a
/usr/lib/libboost_atomic.so
/usr/lib/libboost_atomic.so.1.65.1
/usr/lib/libboost_chrono.a
/usr/lib/libboost_chrono.so
/usr/include/boost/aligned_storage.hpp
/usr/include/boost/align.hpp
/usr/include/boost/any.hpp
/usr/include/boost/array.hpp
/usr/include/boost/asio.hpp
ninja
我的项目内命令的输出:
[0/1] Regenerating build files.
The Meson build system
Version: 0.43.0
Source dir: /home/io/prog/myproj/src
Build dir: /home/io/prog/myproj/builddir
Build type: native build
Project name: myproj
Native C++ compiler: c++ (gcc 7.2.0)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Dependency Boost () found: NO
Meson encountered an error in file meson.build, line 2, column 0:
Dependency "boost" not found
[...]
我缺少什么?
答案1
以下问题解决了我的问题:
我用以下内容替换了介子构建文件:
project('myproj', 'cpp')
cxx = meson.get_compiler('cpp')
boost_dep = [
cxx.find_library('boost_system'),
cxx.find_library('boost_filesystem'),
]
executable('myproj', 'main.cpp', dependencies : boost_dep)
答案2
问题已解决修复使用 gnu 编译器和非美国语言环境对包含目录的检测要查找并使用介子中的依赖关系,您应该使用dependency()
.
要总体上找到提升,您应该在您的meson.build
:
project('myproj', 'cpp')
deps = [
dependency('boost')
]
executable('myproj', 'main.cpp', dependencies: deps)
或者如果你想要 boost 的特定部分:
project('myproj', 'cpp')
deps = [
dependency('boost', modules: ['system', 'filesystem'])
]
executable('myproj', 'main.cpp', dependencies: deps)
cxx = meson.get_compiler('cpp')
如果您使用和的组合cxx.find_library('boost_system')
,您将不会获得编译器和/或链接器标志。find_library()
是原始编译器检查,仅测试/usr/lib
.用户需要确保标头可用,has_header()
并使用 )` 手动定义包含目录declare_dependency(include_directories: '/usr/local/include/xxx
。
dependency()
find_library()
是查找内容的更好方法,只有在项目不支持pkg-config
或时才应该使用cmake
。