2013-09-19 1 views
2

Я рассматриваю возможность использования CMake для проектов, ориентированных на микроконтроллер. Я узнал, как создать файл toolchain и вызвать cmake -DCMAKE_TOOLCHAIN_FILE=Path/To/Toolchain.cmake, чтобы заставить CMake выполнять кросс-компиляцию.Можно ли создавать бинарные файлы для разных целей с помощью CMake?

Однако большинство проектов, над которыми я работаю, также имеют код, который должен быть скомпилирован для платформы хоста. Это часто модульные тесты или другие тестовые инструменты, которые разделяют большую часть своего кода с двоичным кодом, который будет работать на микроконтроллере. Редким случаем может быть проект, в котором даже есть два процессора с разными архитектурами команд, поэтому ему нужен компилятор хоста и два разных кросс-компилятора.

Я хотел бы иметь одну сборку, которая будет управлять ими всеми. Возможно ли иметь конструкцию, которую мне нужно только позвонить cmake /path/to/source && make, или это единственное решение, имеющее несколько файлов «root» CMakeList.txt, каждый для каждой цели?

ответ

2

Каждый запуск CMake будет нацелен на один конкретный генератор и, следовательно, на одну платформу.

Что вы хотите, может быть достигнуто за счет наличия одной иерархии файлов CMakeLists для каждой платформы. Вам нужно дойти до того, что выполнение последовательности звонков cmake .. && make приведет к созданию всего проекта.

Затем напишите мастер CMakeLists, который выполняет все эти отдельные шаги сборки для вас, например. через ExternalProject_Add или с помощью пользовательских команд. В зависимости от структуры вашего проекта может иметь смысл иметь только инструменты, необходимые для обработки здания таким образом, и вместо этого добавлять источники для фактического проекта непосредственно к мастеру CMakeLists.

+0

Спасибо вам за ответ. Я пробовал это, и он работает более или менее, но чувствует себя не очень тонко. Одна из основных проблем, с которыми я сталкиваюсь сейчас, заключается в том, что когда вы вызываете «master» make после внесения изменений в один из подпроектов, эти изменения не будут восстанавливаться. Вы должны использовать 'cd' в каталоге сборки subproject и называть' make' там сами. – Bart

+0

@Bart Это действительно разочаровывающее ограничение. Внешние проекты не должны регулярно меняться, поэтому нет явной поддержки для этого сценария (по крайней мере, об этом я знаю). – ComicSansMS

Смежные вопросы