組み込みターゲット用のアプリケーションをクロスビルドするためのYoctoSDKを提供します。アプリケーション自体はCMakeを使用して構築されています。 SDKセットアップスクリプトは、多くの必要な環境変数(クロスコンパイラーの場所、sysrootなど)を提供します。これまでのところ、アプリケーションを構築するには十分でした。
ただし、最近以降、アプリケーションはBoostライブラリに依存しています(CMakeLists.txtのコマンドfind_package(Boost REQUIRED)
を使用)。これで、CMakeは、SDK sysrootにインストールされていても、ライブラリが見つからないと文句を言います。しかし、Yoctoで直接アプリケーションをビルドすると、問題なく動作します。
いくつかの調査の結果、Yoctoはcmake呼び出しに追加されるtoolchain.cmake
ファイルを生成することが判明しました。このファイルでは、CMakeがライブラリを見つけるために必要な変数CMAKE_FIND_ROOT_PATH
が設定されています。このようなツールチェーンファイルを使用して、SDKを使用してビルドすることもできます。
今、YoctoがそのようなツールチェーンファイルをSDKでエクスポートするメカニズムを提供しているかどうか疑問に思っています。または、SDKがスクリプトなどを提供して、SDKビルドホストに直接ツールチェーンファイルを自動的に作成する場合もあります。
または、SDKのユーザーにツールチェーンファイルを手動で作成してcmake呼び出しに追加するように指示するだけですか?
イメージベースのSDKを使用している、つまりbitbake <image> -c populate_sdk
でビルドしていると仮定すると、次をimage.bb
に追加すると修正されます。
TOOLCHAIN_Host_TASK += "nativesdk-cmake"
これにより、SDKにOEToolchainConfig.cmake
ファイルが作成されます。 SDK環境ファイルを入手すると、cmake
はcmake -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake
のエイリアスになり、開発者をさらに支援します。