Указание встроенных функций Boost.build в jam-файле

Как указать встроенные функции Boost.build в jam-файле (user-config.jam), который будет использоваться для сборки библиотеки Boost? Например, я могу использовать b2 из командной строки VS для создания boost, используя

b2 link=shared threading=multi address-model=64

и мне нужно, чтобы те же функции были включены через конфигурацию .jam.

Я знаю, что система Boost.build может использовать user-config.jam из локального каталога, но я не совсем понимаю синтаксис. Я пробовал это:

using msvc : 11.0;
<address-model>64;

Но это, похоже, не влияет на процесс сборки.

2

Решение

Короче — не стоит этого делать. Конфигурация набора инструментов не предназначена для аппаратного кодирования (например, <address-model>) для всех целей, созданных с помощью этого набора инструментов. Правильный способ состоит в том, чтобы установить эту функцию на все основные цели, которые строятся.

exe myexe : a.cpp : <address-model>64 ;

Это также может быть сделано путем установки значения функции на цели проекта.

project my-project : requirements <address-model>64 ;

# Same as above, project requirements are applied to
# all targets in the project.
exe myexe : a.cpp ;

По сути, это то, что Boost.Build делает с функциями, указанными в командной строке. Они анализируются и применяются ко всем целям высшего уровня в качестве требований.

Если вы действительно хотите использовать user-config.jam чтобы убедиться, что все цели имеют <address-model>64 Вы можете использовать следующий трюк:

# In user-config.jam
import feature
feature.feature build-64 : on : composite ;
feature.compose <build-64>on : <address-model>64 ;

Это определяет новую функцию. Эта функция не является обязательной, поэтому Boost.Build будет использовать ее для всех создаваемых целей. Значение по умолчанию — это первое (и единственное) значение (‘on’), и оно является составным, который указывает <address-model>64, так что это применяется к каждой цели.

При сборке Boost — вы можете переписать командную строку, используя user-config.jam. Если вам нужно указать, какие библиотеки собираются, я считаю, что это единственный путь.

# Un user-config.jam
local argv = [ modules.peek : ARGV ] ;
ECHO Old command line is '$(argv)' ;
modules.poke : ARGV : $(argv) --with-thread address-model=64 ;
argv = [ modules.peek : ARGV ] ;
ECHO New command line is '$(argv)' ;

Но кажется более уместным передать правильную командную строку, используя сценарий оболочки, вместо того, чтобы переписывать его в user-config.jam,

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]