MesonがBoostライブラリを見つけることができません

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

[...]

私は何を見逃していますか?

答え1

次の質問で私の問題を解決しました。

FedoraでBoostが検出されない · 問題#2547

mesonビルドファイルを次に置き換えました。

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コンパイラと米国以外のロケールを使用してインクルードディレクトリ検出の問題を修正しました。mesonで依存関係を見つけて使用するには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)

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

関連情報