Maven-подобный контроль зависимостей для С++?
Скажем, у меня есть проект на С++, который разбит на несколько подпроектов. Подпроект все создает DLL, и разные команды разработчиков работают над каждым из подпроектов. Теперь, если я хочу построить основной проект, есть ли способ избежать необходимости самостоятельно строить все подпроекты?
Короче говоря, я ищу что-то, что делает управление зависимостями (т.е. для двоичных файлов и заголовков) аналогичным образом, как Maven для Java.
На самом деле, я пытался использовать Maven для этого, но это довольно громоздко, потому что я должен создавать пакеты вручную и довольно часто, Maven пропускает самые последние изменения. Кроме того, запуск компиляции - это немного взломать, поскольку я должен вызвать NAnt из Maven (я использую функцию NAnt для непосредственного создания решений Visual Studio).
Любые подсказки и идеи о том, как это сделать?
Ответы
Ответ 1
Я бы предложил использовать CMake. Это многоплатформенный генератор файлов файлов (также создает проекты Visual Studio или Eclipse CDT).
http://www.cmake.org/
У меня действительно был хороший опыт. Самое лучшее, что мне понравилось, это способность создавать общую структуру проекта. Таким образом, вы можете в общих чертах включать подпроекты для модульных тестов и т.д. Без изменения script каждый раз.
У них также есть много модулей о том, как найти предварительно установленные библиотеки сборки, необходимые для проекта (например, Boost, QT и т.д.)
Обновление. В то же время было несколько попыток внедрить управление пакетами для С++. Некоторые проекты, на которые стоит обратить внимание:
- conan.io интегрируется с основными инструментами построения:
- CMake
- Visual Studio
- Makefile
- XCode
- ...
- cpm на основе CMake
Ответ 2
Для управления зависимостями существует новый проект (это стартап-компания), который реализует этот тип инструмента: https://www.biicode.com/ (менеджер зависимостей С++). Вы можете добавить свои зависимости, и они должны работать.
В настоящее время имя проекта conan.io, они были приобретены JFrog.
UPDATE: проект мертвый... К сожалению, кажется, что запуск не может получить достаточное количество платных клиентов, но сервер кажется работает нормально...
UPDATE2: Кажется, есть альтернативный проект: conan.io (спасибо @mucaho)
Ответ 3
Я рекомендую следующие высокоуровневые системы сборки:
Ответ 4
Если вы хотите только управлять зависимостями, попробуйте Ivy, он прекрасно сочетается с Ant (и я предполагаю, что NAnt может делать то же самое основанный на этом blog, который связан с сайтом Ivy).
Существует также Byldan.Net-версия Maven. Не знаю, насколько хорошо это сработает для вас.
Ответ 5
Make и GCC - отличная комбо для действительно хорошей проверки зависимостей.
GCC может автоматически генерировать файлы зависимостей make (-MD), чтобы иметь возможность перестроить все исходные файлы, которые зависят от данного заголовка, например.
У меня есть несколько простых правил, которые я нарезал-n-paste в свои make файлы:
# compile c files
%.o: %.c
${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o [email protected]
# compile c++ files
%.opp: %.cpp
${CPP} ${CPPFLAGS} -c $< -MD -MF $(<:%.cpp=%.dep) -o [email protected]
Теперь, если ваши объектные файлы объявлены в списке OBJ_C и OBJ_CPP:
.PHONY: cleandep
cleandep:
rm -f $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep)
-include $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep)
Make может, конечно, отслеживать зависимости с другими проектами и т.д. при необходимости, перестраивая совместно используемую библиотеку.
Например, если ваши другие команды всегда помещают свои последние DLL в какую-либо общую папку:
myapp: ${SRC_CPP} ${LIB_DIR}other_team.lib
...
${LIB_DIR}other_team.lib: /shared_folder/latest/other_team.lib
cp /shared_folder/latest/other_team.lib ${LIB_DIR}other_team.lib
Ответ 6
Недавно выпущено: biicode Многоплатформенный инструмент и услуга хостинга для разработчиков
Edit:
Biicode устарел
Альтернатива: Conan.io
Ответ 7
Я рекомендую conan, который я использовал в эти дни.
Это очень удобно для поддержки всех зависимых библиотек и двоичных файлов в вашем проекте.
Ответ 8
Вы можете создать пакет NuGet для используемых библиотек и использовать NuGet для управления зависимостями.
См. также NuGet для С++
Ответ 9
Существует множество инструментов, расположенных поверх SCons, обеспечивая более высокую функциональность, аналогичную функции Autotools, которая пытается упростить жизнь разработчиков (например, WAF, SNOCS). К сожалению, сам SCons имеет главный недостаток - более длительное время компиляции для крупных проектов.
Я могу порекомендовать попробовать SNOCS (который был изменен на SCons) для тех из вас, кто ищет легкое управление зависимостями и выбирает параметры компиляции в единственной команде (компилятор, x86/x64, Debug/Release, статические/разделяемые библиотеки, задачи тестирования/установки и т.д.).
SNOCS также пытается решить проблему длительной компиляции, сохраняя вывод конфигурации проектов в отдельных файлах, что позволяет последующим сборкам полностью пропускать фазу конфигурации и перейти прямо к фазе здания (последняя функция сейчас находится в разработке)
Конфигурация CMake становится утомительной в более крупных решениях, поэтому обслуживание системы сборки занимает значительную часть времени разработки. К счастью, как уже упоминал Martijn, biicode, который "использует CMake для генерации вашего проекта с его зависимостями".
Ответ 10
Я рекомендую использовать мать всех систем зависимостей сборки: make.
Ответ 11
Попробуйте SCons
SCons - это инструмент для создания программного обеспечения с открытым исходным кодом, то есть инструмент построения следующего поколения. Подумайте о SCons как улучшенной кросс-платформенной замене классической утилиты Make со встроенной функциональностью, подобной кэшам autoconf/automake и компилятора, таким как ccache. Короче говоря, SCons - это более простой, надежный и быстрый способ создания программного обеспечения.
Ответ 12
Попробуй счётчиков, ты зацепишься. Make устарел, сложный и дорогой в обслуживании.