Я хотел бы использовать make, чтобы получить модульную сборку в сочетании с continuous integration, автоматического модульного тестирования и мультиплатформенный строит. Подобные настройки распространены в Java и .NET, но мне сложно скомпоновать это для make и C/C++. Как это можно достичь?Совершенная Makefile
Мои требования:
- быстро строить; нерекурсивны делают (переполнение стека вопроса What is your experience with non-recursive make?)
- модульной система (то есть минимальная зависимость, Makefile в подкаталоге с компонентами)
- мультиплатформенных (обычно PC для модульного тестирования, заливали цель для системы интеграции/выпуска)
- полной зависимость проверка
- способности выполнять (автоматический) модульные тесты (Agile инженерии)
- крючка в систему непрерывной интеграции
- легко использовать
Я начал работу с non-rec make. Я все еще считаю это прекрасным местом для начала.
Ограничения до сих пор:
- никакой интеграции блок не испытывает
- несовместимости окон компиляторов ARM на основе с путями Cygwin
- несовместимости Makefile с Windows \ путями
- зависимостей вперед
Моя структура выглядит так:
project_root /algorithm /src /algo1.c /algo2.c /unit_test /algo1_test.c /algo2_test.c /out algo1_test.exe algo1_test.xml algo2_test.exe algo2_test.xml headers.h /embunit /harnass makefile Rules.top
Я хотел бы, чтобы держать вещи простыми; здесь единичные тесты (algo1_test.exe) зависят как от компонента «алгоритм» (ok), так и от единичного тестового фреймворка (который может или не может быть известен во время его создания). Тем не менее, перемещение правил сборки в топ-код не привлекает меня, поскольку это будет распространять локальные знания компонентов во всей системе.
Что касается путей Cygwin: я работаю над созданием сборки с использованием относительных путей. Это решает проблему /cygdrive/c
(поскольку компиляторы обычно могут обрабатывать/пути), не внося C: (что делает неприязнь). Любые другие идеи?
Обратите внимание, что вы можете использовать '/' в качестве разделителя путей в Windows, как правило, просто отлично. Почти каждая функция API, использующая пути, прозрачно переводит их в '\' в любом случае. – Joey
Действительно. Однако это письмо-накопитель вызывает проблемы. Make не обрабатывает: well (поскольку он определяет цель). И это/cygdrive/c/не распознается приложениями Windows. Если я переведу/cygdrive/c в c: /, то файл зависимостей, сгенерированный компилятором, не будет распознан make-файлом. – Adriaan