Системы сборки C++ [закрываются]

20
задан flo 17 May 2010 в 08:58
поделиться

5 ответов

Я использую SCons уже больше года, и это действительно здорово. Это полноценная система сборки, а не генератор сценариев сборки.

Он основан на Python, и вы пишете SConstruct и SConscript (эквивалент Makefile) на Python, который позволяет вам вызывать любую доступную библиотеку, которую вы можете пожелать, и гораздо более четкий синтаксис, чем тот, который разрешает Makefile.

Так как Python кроссплатформенный, SCons тоже, проблем нет.

Он поставляется в комплекте с большим количеством целей:

  • обнаруживает доступный двоичный файл и автоматически сопоставляет ряд расширений с правильными двоичными файлами
  • обнаруживает правильные расширения для ваших объектов / библиотек в зависимости от ОС, хотя вы может переопределить его
  • предоставляет возможности для общих операций (которые должны быть отложены после сборки), таких как Move, Copy, Tar, и вы можете предоставить свои собственные скрипты python и перехватить их
  • работает из коробки и при этом предоставляет множество ловушек настройки на каждом уровне

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

Он также предлагает бесплатное определение цикла зависимостей (что определенно не входит в состав Makefile), а интерфейс в целом просто лучше / автоматизирован.

Я сказал, что это было эффективно? Очевидно, это позволяет выполнять несколько заданий параллельно;)

И это также бесплатно, как в бесплатном напитке, не стесняйтесь вносить свой вклад;)

Я могу только рекомендовать это.

7
ответ дан 29 November 2019 в 23:11
поделиться

У меня нет опыта работы с другими, но если вы ищете кроссплатформенную систему сборки с кросс-инструментальной цепочкой, используйте CMake. CMake на самом деле не является системой сборки, это генератор сценариев сборки - он генерирует фактические сценарии сборки для множества систем сборки и (и в этом, на мой взгляд, сильная сторона) генерирует файлы проекта для основных IDE, таких как Visual Studio и KDevelop. Между прочим, в последних версиях KDevelop есть Intellisense для файлов CMake.

Сгенерированные сценарии сборки или решения Visual Studio не так элегантны, как если бы они были созданы вручную, но, поскольку вам также не нужно поддерживать их вручную, это нормально.

Обратной стороной CMake является то, что он не имеет большого количества встроенных инструментов или простого способа его расширения (по сравнению, например, с MSBuild, который, конечно же, является просто системой сборки, а не генератором). . Наши разработчики Linux склонны вызывать инструменты командной строки Unix для выполнения таких действий, как сжатие / распаковка, которые недоступны при типичной установке Windows, в то время как MSBuild, напротив, имеет тысячи дополнительных команд, доступных из проектов сообщества, поэтому вам не нужно использовать в командной строке, и действительно легко создать новую задачу для MSBuild. В настоящее время я изучаю, как обойти эти ограничения для CMake, потому что в настоящее время это означает, что мы не можем полностью построить на Windows, даже если сам код будет хорошо построен.

Написание файлов CMake - не самое приятное занятие, но это нормально.У языка есть некоторые странные особенности (например, необходимость в точности повторять условие if в else и endif, что сведет вас с ума, особенно при экспериментировании), и вы действительно, очень возненавидите наличие файла с именем CMakeLists.txt в каждом и каждый каталог, который имеет собственные правила сборки (а их может быть много, в большом проекте), и все они отображаются только с именем в вашей IDE;)

16
ответ дан 29 November 2019 в 23:11
поделиться

Из того, что вы упомянули, я пробовал Maven - он слишком строгий, не масштабируется и предназначен для Java, поэтому я бы не стал его рассматривать. Я также слышал от людей, использовавших "Automake", который они в шутку называют "Autobreak"

IMHO, проект с долгим ожиданием жизни должен предпочесть чистый Make, GNU Make, если быть точным. В Make есть несколько мощных возможностей, обычно не используемых, которые помогают избежать кодового шаблона (например, использование eval/call, нерекурсивная сборка). Он совместим с любой другой системой сборки (например, в наших проектах мы успешно сочетаем его с Ant, используемым для сборки Java). У него отличная документация, и он знаком большинству разработчиков.

По моему опыту, всегда можно изолировать makesystem от проекта настолько, что большинство make-файлов проекта содержат 2 строки: имя цели и "include ${MKSYS_HOME}/makesystem.mk".

2
ответ дан 29 November 2019 в 23:11
поделиться

Еще один, на который стоит обратить внимание, это Bakefile .

Его основная сила заключается в том, чтобы взять относительно простой входной файл (во всяком случае, простой, как XML) и создать множество различных файлов собственной системы сборки: Makefile.in в системах на основе autoconf (Linux, командная строка OS X, BSD .. .), Решения и файлы проектов Visual C ++, проекты Xcode, MinGW и общие файлы Makefile Unix и т. Д.

Тем не менее, я не знаю, буду ли я использовать подобную систему с самого начала.Поскольку исходной целью является Linux, а остальные - «возможно», подумайте о том, чтобы начать с automake и отложите удаление Bakefile (или чего-то еще) до тех пор, пока вы не выполните портирование. Всегда ошибочно строить вещи до того, как они действительно понадобятся. Всегда есть компромисс - в данном случае синдром наименьшего общего знаменателя - и если вам не нужно платить штраф сегодня, отложите его до тех пор, пока вам не придется платить; вы можете никогда не платить. Если вы выберете automake и разумно создадите свои файлы, миграция не будет слишком болезненной.

1
ответ дан 29 November 2019 в 23:11
поделиться

Взгляните на Waf . Это достойная система, которую я использую для большинства своих проектов, написанных на Python и основанных на Scons, Make и других подобных системах.

4
ответ дан 29 November 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: