Как я могу создать разные версии проекта, используя инструмент Jam Make?
У меня есть проект C++, который компилируется в разные версии, включая выпуск, отладку, разделяемую библиотеку и исполняемый файл, с разными флагами компилятора для каждой. Я пробую Jam как альтернативу Make, потому что он выглядит как более простая система.
Джем способен на это? Основная проблема заключается в том, что он всегда помещает файлы.o в ту же папку, что и исходный файл, поэтому он перезаписывает их при создании нескольких версий.
Обновить
Я нашел решение, которое, кажется, работает. Используя этот файл, я могу создавать отладочные и выпуски конфигураций библиотеки или исполняемого файла.
Команда для сборки библиотеки релизов:
jam -s config=lib -s release=1
Если вы только печатаете jam
, он создает исполняемый файл отладки. Вот Jamfile:
FILES =
main.cpp
;
BASENAME = steve ;
OBJ = obj ;
if $(release)
{
OBJ = $(OBJ)r ;
}
else
{
DEFINES += DEBUG ;
OBJ = $(OBJ)d ;
}
if $(config) = lib
{
OBJ = $(OBJ)_lib ;
OUTFILE = lib$(BASENAME).so ;
DEFINES += SHARED_LIBRARY ;
LINKFLAGS +=
-shared -Wl,-soname,$(OUTFILE) -fvisibility=hidden -fPICS
;
}
else
{
OUTFILE = $(BASENAME) ;
}
LOCATE_TARGET = $(OBJ) ;
MkDir $(LOCATE_TARGET) ;
Main $(OUTFILE) : $(FILES) ;
3 ответа
Я не знаком с джемом Perforce, однако bjam позволяет это - и это тривиально легко. bjam
не помещает промежуточные файлы в тот же каталог, что и исходный файл; он создает каталоги debug/release/static/shared в зависимости от типа проекта, который вы создаете.
Например, если вы хотите собрать релизную и отладочную версию библиотеки и хотите построить ее статически:
bjam debug release link=static
bjam
действительно есть некоторые причуды, но мы нашли это очень эффективным. В настоящее время мы используем (почти) идентичные сценарии сборки для сборки нашей системы с использованием msvc (8.0 и 9.0), gcc 4.3 на x86, gcc 3.4 на ARM и gcc 4.3 для PowerPC. Очень хорошо.
Да, на это способен. Он называется "варианты", Boost.build поставляется с предустановленными "отладка" и "выпуск". Также возможно добавить собственные "функции", определив их как несовместимые с ссылками, которые будут помещать сгенерированные объектные файлы в разные подкаталоги:
функция magic: off on: размноженный композит;
feature.compose on: USE_MAGIC;
Я считаю, что простота поддержки сосуществующих вариантов - одна из самых сильных возможностей boost.build. Кроме того, очень легко поддерживать иерархии проектов (например, приложения, требующие библиотек); это делается на уровне файлов, а не повторяется в каталогах, что делает параллельные сборки очень эффективными.
Популярность системы сборки очень важна, потому что это означает, что больше людей в вашей организации (и будущих сотрудников), вероятно, узнают об этом и смогут поддержать его.
Я бы сказал, не делай этого. Не используйте джем. Кто-нибудь кроме буста этим пользуется? Я думаю, что Ant, например, является гораздо более популярной системой, и мне легче учиться. Сделайте одолжение своей организации и не трогайте джем.