Можно ли установить вариант отладки и выпуска библиотеки одной и той же командой? - PullRequest
0 голосов
/ 03 сентября 2010

Я использую следующий Jamfile (в каталоге / home / morpheus / base / CDef):


lib CDef: [glob * .cpp]: статический;

установка libCDef : CDef: LIB "/ home / morpheus / base_install / lib": выпуск;

установить _libCDef_D: CDef: LIB "/ home / morpheus / base_install / libdebug": debug;


Мне было интересно, можно ли изменить две строки установки на ту, которая содержит директивы debug и release.

Также для использования библиотек в другом Jamfile в другом каталоге (/ home / morpheus / FSLR) Я использую следующий Jamfile для сборки exe callFSLR:


lib CDef:: release CDef / home / morpheus / base_install / lib;lib CDef:: отладка CDef / home / morpheus / base_install / libdebug;

exe callFSLR: call_FSLR.cpp CDef:: отладочный выпуск;

install install-bin: callFSLR: "/ home /выпуск morpheus / base_install / bin ";


Я считаю, что использование" use-project "для ссылки на CDef в Jamfile / home / morpheus / base / CDef / Jamfile, вероятно, целесообразно?

1 Ответ

0 голосов
/ 05 сентября 2010

(я думаю, что некоторые вещи отсутствуют в ваших правилах варенья, возможно, из-за форматирования.)

Да, вы определенно можете определить цели отладки и производства с помощью одного и того же правила, используя условные требования.Примером является даже документация install правила .

Я полагаю, что ваши исходные правила выглядят как

install libCDef
  : CDef
  : <install-type>LIB
    <location>"/home/morpheus/base_install/lib"
  : <variant>release ;

install _libCDef_D
  : CDef
  : <install-type>LIB
    <location>"/home/morpheus/base_install/libdebug"
  : <variant>debug ;

Вы захотите сделать location признак зависимости от варианта, например, так:

install libCDef
  : CDef
  : <install-type>LIB
    <variant>release:<location>"/home/morpheus/base_install/lib"
    <variant>debug:<location>"/home/morpheus/base_install/libdebug"
  ;

Что касается второго вопроса, то да, use-project поможет, хотя в этом нет необходимости.Вы хотите сделать это

exe callFSLR : call_FSLR.cpp ../base/CDef//CDef ;

../base/CDef//CDef относится к цели с именем CDef, определенной в проекте (каталоге) ../base/CDef.Это относится к правилу библиотеки, поэтому при расширенной сборке будет использоваться версия библиотеки в каталоге bin, а не версия, созданная правилом установки.(Это может иметь значение, если у вас есть проблемы с динамической библиотекой.) Кроме того, вам не нужно lib CDef непосредственно над этим правилом.

Чтобы избежать неуклюжести ../base/CDef, вы можете использовать use-project Правило, чтобы дать новое определение для проекта.Затем, если вы реорганизуете структуру каталогов, у вас есть только одно место, чтобы изменить ее.

use-project /CDef-project : ../base/CDef ;

exe callFSLR : call_FSLR.cpp /CDef-project//CDef ;

Другая возможность, если вы собираетесь использовать одну цель в этом одном Jamfile, это использовать правило псевдонима.

alias CDef : ../base/CDef//CDef ;

exe callFSLR : call_FSLR.cpp CDef ;
...