В настоящее время я могу собрать свою программу, используя boost build на разных платформах, установив набор инструментов и параметры в командной строке. Например :
b2
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
;
Как насчет использования 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. ;
}
После долгого времени я обнаружил, что действительно нет никакого способа (кроме очень хакерского) сделать это. Цель Boost.Build — дать возможность пользователю определить набор инструментов.
У пользователя есть несколько способов указать набор инструментов:
--toolset=gcc
напримерuser-config.jam
для всех проектов, составленных пользователемsite-config.jam
для всех пользователей user-config.jam
может быть в $ HOME пользователя или в пути ускоренной сборки.
site-config.jam
должен находиться в каталоге / etc, но также может находиться в двух местах выше.
Таким образом, настройте ваш site-config или user-config для приятного опыта и напишите хороший файл README для пользователей, пытающихся скомпилировать вашу программу.
Надеюсь, это поможет кому-то еще.