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

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

линукс

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.

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

# 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 
;

person Carneiro    schedule 22.09.2013    source источник


Ответы (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. ;
}
person banburybill    schedule 08.10.2014

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

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

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

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

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

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

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

person Carneiro    schedule 08.11.2013