я использую Увеличение (1.54.0, bjam 2011.12.1. OS = NT) с STLport (5.2.1) по проекту разработки Windows CE. Я начал с одного пакета SDK для Windows CE, и все прошло нормально. Но теперь мне нужно поддерживать несколько SDK для платформы Windows CE, каждый со своими собственными системными заголовками и флагами компиляции.
Во-первых, я собрал STLport для каждой из этих платформ (скажем, PLATFORM1 и PLATFORM2) и поместил библиотеки STLport, скажем, c:\lib\STLport-5.2.1\lib\PLATFORM1
а также c:\lib\STLport-5.2.1\lib\PLATFORM2
,
Затем в user-config.jam
Я имею:
using stlport : 5.2.1~PLATFORM1 : c:/lib/STLport-5.2.1/stlport : c:/lib/STLport-5.2.1/lib/PLATFORM1 ;
using stlport : 5.2.1~PLATFORM2 : c:/lib/STLport-5.2.1/stlport : c:/lib/STLport-5.2.1/lib/PLATFORM2 ;
Затем для PLATFORM1 я создаю библиотеки Boost, запустив bjam.exe с stdlib=stlport-5.2.1~PLATFORM1
флаг, при сборке для PLATFORM2 использует stdlib=stlport-5.2.1~PLATFORM2
,
Но неверный путь к библиотеке STLport используется bjam для PLATFORM2. Например, запуск bjam с флагом -n показывает следующие команды связывания для платформ (обратите внимание на неправильный параметр LIBPATH во втором вызове):
link.exe ... /out:"building\...\stdlib-stlport-5.2.1~PLATOFRM1\threading-multi\boost_xxx.dll" ... /LIBPATH:"c:\lib\STLport-5.2.1\lib\PLATFORM1"link.exe ... /out:"building\...\stdlib-stlport-5.2.1~PLATOFRM2\threading-multi\boost_xxx.dll" ... /LIBPATH:"c:\lib\STLport-5.2.1\lib\PLATFORM1"
В принципе, он всегда использует первый using stlport
директива из user-config.jam, независимо от того, какую версию я передаю параметру stdlib.
Я делаю что-то неправильно? Как правильно настроить среду для создания Boost с различными двоичными файлами STLport?
Я решил проблему с помощью специальной переменной для определения расположения библиотек STLport.
По сути, я сделал это следующим образом.
в user-config.jam
Я изменил все мои инициализации набора инструментов STLport на одну:
используя stlport: 5.2.1: c: /lib/STLport-5.2.1/stlport:
с: /lib/STLport-5.2.1/lib/$ (STLPORTLIBSUBDIR) ;
Кроме того, чтобы посмотреть переменную, я добавил следующую строку где-то перед директивой using:
local STLPORTLIBSUBDIR = [modules.peek: STLPORTLIBSUBDIR];
И затем, чтобы собрать библиотеки Boost для PLATFORM1, мне нужно передать bjam следующие параметры:
stdlib=stlport-5.2.1
а также -sSTLPORTLIBSUBDIR=PLATFORM1