[c++] C ++ Build Systems - Что использовать?



Answers

Теперь вы можете использовать Gradle: https://docs.gradle.org/current/userguide/native_software.html

Кажется, это созрело совсем немного за годы, прошедшие с тех пор, как я изначально разместил это. Страница, в которой говорится о том, что проект «инкубирует», исчез, но я не могу найти официальное объявление, удаляющее этот статус.

Question

Я смотрю на запуск нового проекта на C ++ - только в свое время изначально - и я изучаю доступные системы сборки. Казалось бы, ответ «Многие, и все они ужасные».

Для этого мне особенно нужны функции:

  1. Поддержка C ++ 11
  2. Кросс-платформа (Linux как главная цель, но способная работать как минимум на Windows)
  3. Поддержка достойного тестирования модулей
  4. Поддержка нескольких модулей для разделения кода
  5. Поддержка генерации кода (использование asn1c или protobuf - на 100% еще не завершено)
  6. Простота обслуживания

Теперь я знаю, что я могу сделать 1-4 из тех, кто использует CMake и Autotools достаточно легко. Вероятно, также со Сконсом и Вафом и с другими. Проблема в том, что я никогда не разрабатывал, как правильно генерировать код, используя их, - это исходные файлы, которые не существуют до тех пор, пока процесс сборки не будет запущен, поэтому исходные файлы, которые система сборки должна иметь возможность конвертировать в исполняемый код но на самом деле не знает об этом до тех пор, пока сборка не начнется ... (ASN1C, в частности, генерирует десятки заголовков и исходных файлов, которые должны работать вместе, а фактический набор файлов зависит от содержимого вашего asn-файла). также тот факт, что ни один из них не особенно удобен в обслуживании - у CMake и Autotools есть свой собственный огромный набор сценариев, которые вам нужно для управления, чтобы они работали, а Waf и Scons требуют, чтобы любой, кто работает с ними, имел приличное знание python (I не надо) работать с ними ...

Итак - какие системы сборки рекомендуются для чего-то подобного? Или я буду застрять с файлами make и shell-скриптами?




Вы можете использовать Ceedling . Обратите внимание, однако в настоящий момент он поддерживает только C, и он тесно связан с авторскими рамками тестирования Unity и CMock.

Он может быть разветвлен и изменен для работы с компилятором C ++ и модульным тестированием / издевательской структурой довольно легко.

Также Tup - достойное упоминание. Это очень быстро, но он ничего не знает о тестировании фреймворков и т. Д., Что означает, что вам придется писать свою собственную систему сборки с помощью Tup. Если вы планируете делать TDD, Tup - это, вероятно, путь.




Scons - очень дружелюбная и гибкая система, но вы правы, Лотар, это очень медленно.

Но есть способ повысить производительность программ, написанных на Python. Это использование JIT. Из всех известных проектов PyPy - очень мощная, быстрорастущая и мотивированная реализация JIT-Python 2.7. Совместимость PyPy с Python 2.7 просто потрясающая. Тем не менее, Scons объявлен как неподдерживаемый проект в вики-совместимости PyPy . Waf , с другой стороны, смоделированный как suutor на основе python-based autotools, полностью поддерживается инфраструктурой PyPy. В моих проектах скорость сборки увеличилась в 5-7 раз при переходе на PyPy. Вы можете увидеть отчеты о производительности от PyPy .

Для современной и относительно быстрой сборки система Waf - хороший выбор.




Я использовал SCons и впечатлен этой системой сборки. SCons расширяется с помощью python и python - это здорово, потому что у Python есть все, что вам нужно, просто закодируйте логику, все низкоуровневые функции уже реализованы в SCons и Python и являются кроссплатформенными. Если у вас хорошие навыки программирования, ваши скрипты сборки будут выглядеть идеально и легко.

Make, CMake и подобные системы сборки выглядят как мусор макросов. Waf является аналогом SCons. Я пытаюсь использовать Waf, но Сконс ​​будет более дружелюбным, поэтому я остался с SCons.

По мнению толпы, SCons слишком медленный, но в середине проекта я не видел разницы между make и SCons по скорости сборки. Вместо этого, SCons хорошо работал с параллельными сборками, в то время как у Make были большие проблемы с ним.

Кроме того, SCons позволяет вам получать - настраивать, создавать, развертывать, генерировать конфигурацию из шаблонов, запускать тесты и выполнять любую другую задачу, которая может быть выполнена, и кодирование с помощью python и SCons - все в одном. Это очень большое преимущество.

Для простого проекта CMake также является хорошим выбором.




Links



Tags

c++ c++   build