Как я могу создать разные версии проекта, используя инструмент Jam Make? - PullRequest
3 голосов
/ 09 марта 2009

У меня есть проект 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 ]

2 голосов
/ 09 марта 2009

Я не знаком с джемом 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. Очень хорошо.

1 голос
/ 09 марта 2009

Да, на это способны. Он называется «варианты», boost.build поставляется с предустановленными «отладка» и «выпуск». Также можно добавлять свои собственные функции, определяя их поскольку link-несовместимый помещает сгенерированные объектные файлы в разные подкаталоги:

функция магия: выкл. На: распространяемый композит;

feature.compose on: USE_MAGIC;

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

0 голосов
/ 09 марта 2009

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

Я бы сказал, не делай этого. Не используйте джем. Кто-нибудь кроме буста этим пользуется? Я думаю, что Ant, например, является гораздо более популярной системой, и мне легче учиться. Сделайте одолжение своей организации и не трогайте джем.

...