Как я могу создать разные версии проекта, используя инструмент 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, например, является гораздо более популярной системой, и мне легче учиться. Сделайте одолжение своей организации и не трогайте джем.

Другие вопросы по тегам