Выбор параметров компилятора на основе операционной системы в boost-build

В настоящее время я могу собрать свою программу, используя boost build на разных платформах, установив набор инструментов и параметры в командной строке. Например :

Linux

b2

MacOS

b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++"

Есть ли способ создать правило в файле Jamroot, чтобы решить, какой компилятор использовать в зависимости от операционной системы? Я ищу что-то вроде этого:

import os ;
if [ os.on-macos ] {
using clang : <cxxflags>"-stdlib=libc++" <linkflags>"-stdlib=libc++c ;"}

в Linux он автоматически решает использовать gcc, но в mac, если я не укажу набор инструментов clang, он попытается (безуспешно) скомпилировать его с помощью gcc.

Просто для справки, вот мой текущий джамрут (любые предложения также приветствуются):

# Project requirements (note, if running on a Mac you have to build foghorn with clang with libc++)
project myproject
: requirements <cxxflags>-std=c++11 <linkflags>-std=c++11 ;

# Build  binaries in src
lib boost_program_options ;
exe app
: src/main.cpp src/utils src/tools boost_program_options
;

2

Решение

Как насчет использования Jamroot? У меня есть следующее в моем. Он выбирает между двумя версиями GCC в Linux, в зависимости от того, что находится в переменной среды, и выбирает vacpp в AIX.

if [ os.name ] = LINUX
{
switch [ modules.peek : ODSHOME ]
{
case *gcc-4*    : using gcc : 4.4 : g++-4.4 ;

case *gcc-3.3*  : using gcc : 3.3 : g++-3.3 ;

case *          : error Only gcc v4 and gcc v3.3 supported. ;
}

}
else if [ os.name ] = AIX
{
using vacpp ;
}
else
{
error Only Linux and AIX supported at present. ;
}
1

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

После долгого времени я обнаружил, что действительно нет никакого способа (кроме очень хакерского) сделать это. Цель Boost.Build — дать возможность пользователю определить набор инструментов.

У пользователя есть несколько способов указать набор инструментов:

  1. в командной строке с --toolset=gcc например
  2. в конфигурации пользователя, установив его в user-config.jam для всех проектов, составленных пользователем
  3. в конфигурации сайта, установив его в site-config.jam для всех пользователей

user-config.jam может быть в $ HOME пользователя или в пути ускоренной сборки.

site-config.jam должен находиться в каталоге / etc, но также может находиться в двух местах выше.

Таким образом, настройте ваш site-config или user-config для приятного опыта и напишите хороший файл README для пользователей, пытающихся скомпилировать вашу программу.

Надеюсь, это поможет кому-то еще.

0