2017-01-31 45 views
6

Dostarczam zestaw SDK do Yocto, aby utworzyć kompilację aplikacji docelowej. Sama aplikacja jest zbudowana przy użyciu CMake. Skrypt instalacyjny zestawu SDK udostępnia wiele niezbędnych zmiennych środowiskowych (takich jak lokalizacja cross-kompilatora, sysroot itp.), Które do tej pory wystarczały do ​​zbudowania aplikacji.Zestaw SDK Yocto z plikiem cmake toolchain

Jednak od niedawna aplikacja ma zależność od biblioteki Boost (za pomocą polecenia find_package(Boost REQUIRED) w CMakeLists.txt). Teraz CMake skarży się, że nie może znaleźć biblioteki, mimo że jest zainstalowana w sysroot SDK. Ale jeśli zbuduję aplikację bezpośrednio w Yocto, działa dobrze.

Po kilku badaniach okazało się, że Yocto generuje plik toolchain.cmake, który jest dodawany do wywołania cmake. W tym pliku ustawiana jest zmienna CMAKE_FIND_ROOT_PATH, którą program CMake musi znaleźć w bibliotekach. Korzystając z takiego pliku toolchain, mogę również budować przy użyciu SDK.

Teraz zastanawiam się, czy Yocto zapewnia mechanizm eksportowania takiego pliku toolchain z SDK. Lub, jeśli SDK udostępnia skrypt lub coś, co automatycznie tworzy plik toolchain bezpośrednio na hoście budowania SDK.

A może po prostu powiem użytkownikom zestawu SDK, aby ręcznie utworzył plik toolchain i dodał go do ich wywołania cmake?

Odpowiedz

7

Zakładając, że używasz obrazu w oparciu SDK, czyli budowanie go z bitbake <image> -c populate_sdk, dodanie następujących do image.bb powinien to naprawić:

TOOLCHAIN_HOST_TASK += "nativesdk-cmake" 

To powinno dać ci plik w SDK OEToolchainConfig.cmake. Po sourcowaniu pliku środowiska SDK, cmake będzie aliasem dla cmake -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake, aby jeszcze bardziej pomóc swoim programistom.

+0

Wielkie dzięki Anders, to nie pierwszy raz, kiedy mi pomagasz! –

+0

Jeszcze jedno pytanie - czy można również utworzyć ten plik podczas budowania za pomocą 'bitbake meta-ide-support'? Próbowałem utworzyć plik 'meta-ide-support.bbappend', który ustawia' TOOLCHAIN_HOST_TASK', ale wydaje się, że nic nie robi. –

+0

Nigdy nie próbowałem 'meta-ide-wsparcia'. Czy buduje nawet toolchain? W przeciwnym razie, 'TOOLCHAIN_HOST_TASK' nie będzie działać. Dlaczego nie dodasz go do swojego zestawu SDK-build zamiast "meta-ide-support"? – Anders