LINUX.ORG.RU

Тулчайн CMake

 , ,


1

4

Хочу попробовать использовать CMake для сборки прошивок для микроконтроллеров. Разумеется, для этого требуется другой тулчайн (arm-none-eabi) вместо системного. Как я понимаю, есть два варианта:

1) Тупой. Сделать SET(CMAKE_C_COMPILER «arm-none-eabi») внутри CMakeLists.txt проекта.

2) Умный. Сделать специальный файлик тулчайна, где прописать все необходимые опции. А затем подсунуть его в переменную CMAKE_TOOLCHAIN_FILE.

Проблема в том, что второй вариант рекомендуют делать с помощью опций запуска CMake. Типа cmake -DCMAKE_TOOLCHAIN_FILE=...

Однако в случае с прошивкой для микроконтроллера возможность лёгкого выбора целевой платформы не имеет смысла, так как весь код всё равно заточен под конкретный МК. Более того, попытка компиляции с нативным тулчайном гарантированно обломается. Соответственно, хотелось бы как-нибудь прописать тулчайн прямо внутри CMakeLists.txt, а не указывать его явно. Однако SET(CMAKE_TOOLCHAIN_FILE ...) не срабатывает. Вероятно, чтение этой переменной происходит раньше, чем исполнение команд из файла проекта.

Что делать? Как правильно сменить тулчайн и при этом по возможности как-то жёстко это зафиксировать, а не указывать в опциях командной строки при запуске CMake?

★★★★★

Последнее исправление: KivApple (всего исправлений: 2)

Ответ на: комментарий от intelfx
cmake_minimum_required(VERSION 3.5)

set(CMAKE_TOOLCHAIN_FILE ../../toolchain/stm32.cmake)

project(stm32_blinker)

set(SOURCE_FILES main.c)
add_executable(stm32_blinker ${SOURCE_FILES})
KivApple ★★★★★
() автор топика

Написать тулчейн-файл прийдётся, это правильный способ кросскоспиляции в CMake. Чтобы не задавать одни и те же опции сборки первое что приходит в голову — написать скрипт-враппер, который вызовет cmake с нужными аргументами. Но если это пахнет костылями, то можно написать этот враппер средствами самого CMake, одной командой: ExternalProject_Add().

Dendy ★★★★★
()

Я просто делаю source set_my_environment_for_arm.sh перед сборкой и норм.

UVV ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.