Compiling

Meson 找不到 Boost 庫

  • April 1, 2020

我想使用 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

[...]

我錯過了什麼?

以下問題解決了我的問題:

Fedora 上未檢測到 Boost · 問題 #2547

我用以下內容替換了介子建構文件:

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)

該問題已通過使用 gnu 編譯器和非美國語言環境修復包含目錄的檢測以及在介子中查找和使用您應該使用的依賴項來解決dependency()

要找到一般的提升,你應該在你的meson.build

project('myproj', 'cpp')
deps = [
   dependency('boost')
]
executable('myproj', 'main.cpp', dependencies: deps)

或者如果你想要提升的特定部分:

project('myproj', 'cpp')
deps = [
   dependency('boost', modules: ['system', 'filesystem'])
]
executable('myproj', 'main.cpp', dependencies: deps)

如果您使用 and 的組合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-configcmake.

引用自:https://unix.stackexchange.com/questions/408963