Рецепт битового теста на основе cmake: отсутствует системный корень?

Я чувствую, что должен делать что-то в корне неправильно. Я создал рецепт, основанный на проекте cmake. Компиляция проекта с использованием созданного yocto набора инструментов так же проста, как и запуск CMake затем делать но он не может скомпилировать по рецепту:

SUMMARY = "Opendnp3 is the de facto reference implementation of IEEE-1815 (DNP3)"DESCRIPTION = "Opendnp3 is a portable, scalable, and rigorously tested implementation of the DNP3 (www.dnp.org) protocol stack written in C++11. The library is designed for high-performance applications like many concurrent TCP sessions or huge device simulations. It also embeds very nicely on Linux."HOMEPAGE = "https://www.automatak.com/opendnp3"SECTION = "libs"DEPENDS = "asio"LICENSE = "Apache-2.0"LIC_FILES_CHKSUM = "file://NOTICE;md5=9788d3abe6c9401d72fdb3717de33e6a"SRCREV = "e00ff31b837821064e5208c15866a9d46f8777b1"SRC_URI = "git://github.com/automatak/dnp3;branch=2.0.x"S = "${WORKDIR}/git"inherit cmake
EXTRA_OECMAKE += ""

Проблема в том, что я думаю, что CXXFLAGS, используемые для g ++, не соответствуют CXXFLAGS, определенным средой инструментальной цепочки. В основном —SYSROOT отсутствует и g ++ не может найти стандартные заголовки c ++ (например: cstdint).

Я частично исправил проблему, переопределив do_configure из cmake.bbclas, просто удалив -DCMAKE_TOOLCHAIN_FILE = $ {WORKDIR} /toolchain.cmake. На самом деле CXXFLAGS определяется toolchain.cmake как:

 -march=armv7-a -mfpu=neon  -mfloat-abi=hard -mcpu=cortex-a8  --sysroot=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot  -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0=/usr/src/debug/dnp3/2.2.0-r0 -fdebug-prefix-map=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot-native= -fdebug-prefix-map=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot=  -fvisibility-inlines-hidden  -march=armv7-a -mfpu=neon  -mfloat-abi=hard -mcpu=cortex-a8  --sysroot=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot

Таким образом, sysroot определяется (фактически дважды) как:

/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot

но не заканчивается в Makefile, сгенерированном cmake, так что я думаю, что-то в toolchain.cmake заставляет конфигурацию cmake проекта идти на юг.

Оказывается, это была проблема cmake с самим проектом. В одном из включенных файлов конфигурации .cmake произошла веселая путаница между флагами C и CXX. Я отправлю запрос на извлечение сопровождающему. CXXFLAGS обрабатывается по-разному между SDK (включен непосредственно в команду CXX) и с помощью bitbake объясняет, почему он работает с SDK (все еще не совсем уверен, почему он работает без toolchain.cmake хоть).

Благодарю.

0

Решение

--sysroot отсутствует из CXXFLAGS потому что Yocto наполняет его в CXX сама переменная. Обратите внимание, что наряду с sysroots Каталог Yocto будет иметь environment-setup-XXX файл, который вы должны источник. Отсюда и весь материал sysroot.

0

Другие решения

Других решений пока нет …