Хорошо, кажется, это не такой простой вопрос, как я думал, поэтому я самостоятельно разработал решение. Он использует скрипт для достижения конечного результата, поэтому я все еще надеюсь, что у гуру Jam будет решение только для варенья.
SubDir . ;
SubInclude . src ;
SubInclude . test ;
- Создать Jamfile в каталоге src
SubDir .. src ;
Library mylib : mylib.c ;
- Создать Jamfile в тестовой директории
SubDir .. test ;
Main mytest : mytest.c ;
Depends mytest : mylib$(SUFLIB) ;
С этим параметром, пока я нахожусь в корневом каталоге, всякий раз, когда я пытаюсь собрать mytest, библиотека также перекомпилируется (при необходимости). Я нашел старое сообщение в списке рассылки jammer, описывающее его.
Увы, это не работает, если я нахожусь в подкаталоге test, поскольку jam может только смотреть down в подкаталоги.
Итак, я создал простой скрипт с именем jmk
и соединил его с исполняемым файлом jam
(чтобы оба они были в пути):
if [ "$JMKROOT" = "" ] ; then
JMKROOT=`pwd`
export JMKROOT
fi
cd $JMKROOT
jam $*
и я установил переменную среды JMKROOT в корень моего проекта.
Когда я компилирую в оболочке Windows (вот почему я хочу использовать Jam), я просто использую этот небольшой jmk.bat
командный файл:
@echo off
if "%JMKROOT%" EQU "" set JMKROOT=%CD%
set OLDCD=%CD%
cd %JMKROOT%
jam %1 %2 %3 %4 %5 %6 %7 %8 %9
cd %OLDCD%