Compiling
Meson 找不到 Boost 庫
我想使用 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 [...]
我錯過了什麼?
以下問題解決了我的問題:
我用以下內容替換了介子建構文件:
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-config
或cmake
.