Самый простой способ автоматизированного управления зависимостями в Stack Overflow

Связанный вопрос: Системы сборки C ++ — Что использовать?

Я изо всех сил пытаюсь найти хороший инструмент управления сборкой / зависимостями для моего проекта c ++ со следующими желаемыми функциями:

  • возможность указать зависимость по имени, версии
  • «include» каталоги зависимостей автоматически включаются во время компиляции моего приложения
  • зависимости автоматически загружаются, собираются и связываются с моим приложением
  • транзитивные зависимости также имеют два вышеуказанных поведения
  • возможность задавать зависимости тестовой области
  • тесты автоматически создаются и запускаются, возможно, с помощью инструмента проверки утечки памяти (например, valgrind)
  • потенциально запустить инструмент покрытия, например, gcov
  • кроссплатформенность поддерживается

Я использовал Maven, с [Нар-Maven-плагин], а иногда [cmake-maven плагин]. Тем не менее, это означает, что я должен создать [pom.xml в зависимости]. Этот метод не особенно хорош, как иногда, [противный pom.xml] должен быть создан, чтобы заставить вещи работать. Кроме того, он не поддерживает запуск valgrind (пока нет встроенной поддержки).

Я пытался использовать CMake, так как видел, что многие проекты используют его, но я обнаружил, что много времени тратится на «написание системы управления сборкой / зависимостями» вместо «ее использования». Да, это правда, я могу написать много функций, которые идут:

function(RequireSomeLib artifact)
# ExternalProject_Add(SomeLib ... etc.)
# find SomeLib package
# add include dirs(artifact SomeLib_INCLUDE_DIRS)
# if SomeLib is not just a header library, also link its built library to the artifact
# for each of SomeLib's dependencies, do this same "call" (transitive dependencies' libraries must also be linked when building an executable)
endfunction()

для каждой зависимости. Утомительно, но в настоящее время самый чистый путь, который я вижу, идет вперед.

С предпосылкой, что CMake используется библиотеками, от которых зависит мой проект, Есть ли лучший способ решения этой проблемы?

Я не видел и не пробовал SCons, AutoTools или QMake (пока).

В Java проблема «извлечения зависимостей, сборки, тестирования и публикации» намного проще ._.

2

Решение

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

Если вы посмотрите достаточно внимательно, вы найдете дебаты среди сторонников каждой системы сборки. Я нашел один из таких пару лет назад. Их аргументы были настолько слабыми, что я прекратил поиски.

Я являюсь пользователем CMake по одной простой причине: это было первое, что я смог найти несколько лет назад, что позволило мне создавать разные каталоги для сборки. Я уверен, что все современные системы сборки уже реализовали эту идею, но я остановился на CMake только потому, что привык к этому. Честно говоря, я обнаружил очень мало разумных преимуществ перед Makefile. Мне пришлось написать шаблонный код для моего CMakeFiles.txt, хотя это был проект C ++ без зависимостей.

Некоторое время спустя я решил попробовать несколько разных IDE; Мне повезло, что Qt Creator работает над проектами CMake; есть и другая причина, по которой я остался на CMake.

Я советую вам посетить веб-страницу каждой системы сборки; проверьте их в настоящее время реализованные функции (не TODO), сравнения с другими системами, поддержку IDE и сложность кода, который вы должны написать для них. Я уверен, что вы не найдете систему сборки, которая удовлетворяет всем вашим требованиям, поэтому вам придется тщательно их протестировать, чтобы увидеть, какая из них лучше всего подходит для вас.

2

Другие решения