`bjam --toolset =` и значения тегов для компиляторов Apple? - PullRequest
5 голосов
/ 08 сентября 2010

При создании двоичных библиотек Boost с bjam можно указать, какой компилятор использовать, без указания конкретной версии компилятора, используя определенные значения для опции --toolset=.Например:

bjam --with-serialization --toolset=msvc

значение набора инструментов msvc указывает bjam искать в вашей системе некоторую версию Microsoft VisualC ++, а затем использовать его для создания ряда вариантов библиотеки Boost.Serialization.Полученные библиотеки будут содержать тег, указывающий, какой набор инструментов фактически использовался.Например, приведенная выше команда создает файлы, такие как:

libboost_serialization-vc100-mt-s-1_44.lib
libboost_serialization-vc100-mt-sgd-1_44.lib
...

, где строка vc100 в имени файла представляет собой тег набора инструментов , указывающий, что Microsoft Visual C ++ 2010 версия компилятора была найдена и использована для сборки библиотек.[Более подробную информацию об соглашениях об именах файлов библиотеки Boost можно найти здесь . ]

Можно также указать специфическую версию компилятора, использующую некоторые другие значения для --toolset= вариант.Например:

bjam --with-serialization --toolset=msvc-9.0

сообщает bjam, что, хотя в моей системе может быть несколько компиляторов, я хочу, чтобы он специально использовал Microsoft Visual C ++ 2008 .Полученные библиотеки содержат строку тега vc90, указывающую на то, что Microsoft Visual C ++ 2008 использовался для их создания.

Документация Boost выглядит немного устаревшей в отношенииновым компиляторам на Mac (например, как отличить GCC, LLVM-GCC и LLVM?)

Мой вопрос: каковы некоторые другие значения bjam --toolset= и соответствующие им теги для * 1047?* определенные версии компилятора в Xcode 3 и Xcode 4 на Mac ( не общие значения имени компилятора, такие как darwin)?Это где-нибудь задокументировано?Даже если сборка библиотек Boost с некоторыми версиями еще не поддерживается Boost, уже указаны toolset и значения тегов?

Помогите, пожалуйста, заменить ??? s в этой таблице:

TOOL AND VERSION               --toolset=     TAG
======================================================
Microsoft Visual C++ 2008      msvc-9.0       vc90
Microsoft Visual C++ 2010      msvc-10.0      vc100
Apple (1) GCC 4.0 (2)            ???          xgcc40
Apple GCC 4.2                    ???          xgcc42
Apple LLVM GCC 4.2               ???           ???
Apple LLVM compiler 1.5 (2)      ???           ???
Apple LLVM compiler 2.0 (3)      ???           ???

(1) Apple выпускает собственные версии компиляторов GCC и LLVM для добавления специфичных для Apple расширений и поведения.

(2) Доступно только в Xcode 3.

(3) Доступно только в Xcode 4.

1 Ответ

6 голосов
/ 08 сентября 2010

Существует прямое сопоставление набора инструментов с базовой частью тега. Следовательно, для любого указанного вами компилятора Apple Xcode, который использует набор инструментов darwin.jam, начало тега всегда будет xgcc (для Xcode GCC). Вторая часть, то есть номер версии компилятора, обычно автоматически обнаруживается из самого компилятора. Код набора инструментов darwin.jam использует параметр -dumnpversion, чтобы узнать, что это за версия (см. darwin.jam строка # 123). Итак, несколько вещей:

  1. Для Xcode это всегда будет toolset=darwin для значения по умолчанию g++.
  2. Для других версий не по умолчанию вы должны установить site-config.jam или user-config.jam, чтобы сообщить Boost Build, где и какие у вас есть компиляторы (см. BB Configuration документы). *
  3. toolset=darwin-<some_version> соответствует тому, что вы указали в своей конфигурации.
  4. Набор инструментов darwin.jam поддерживает умный выбор компилятора на основе того, что вы пытаетесь сделать, чтобы сделать его немного проще.

Например, я использую что-то вроде следующего для разработки под iOS:

using darwin : : /Xcode-path/usr/bin/g++-4.0 ;
using darwin : : /Xcode-path/usr/bin/g++-4.2 ;
using darwin : 4.2~iphone
:   /Xcode-path/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv6
:   <striper>
:   <architecture>arm <target-os>iphone
;
using darwin : 4.2~iphonesim
:   /Xcode-path/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2
:   <striper>
:   <architecture>x86 <target-os>iphone
;

На что я могу:

  1. bjam toolset=darwin-4.0 - Для обычной сборки OSX с GCC 4.0. Что приводит к тегу xgcc-42.
  2. bjam toolset=darwin-4.2 - аналогично для OSX и GCC 4.2. За что я бы получил тег xgcc-42.
  3. bjam toolset-darwin architecture=arm target-os=iphone - сделать сборку устройства iPhone с GCC 4.2. В результате тег также становится xgcc42, что является столкновением. Но есть предел тому, сколько мы можем учесть в этих тегах. И обычно это не проблема, потому что в любом случае можно разделить результаты на разных платформах.

Вы можете настроить использование одного из компиляторов LLVM, добавив в свою конфигурацию:

using darwin : 4.2~llvm~gcc : /Xcode-path/user/bin/llvm-g++ ;

И вызвать с bjam toolset=darwin-4.2~llvm~gcc. К сожалению, тег также будет xgcc-4.2 (опять же, он основан на использовании darwin.jam). Поэтому вам нужно будет отделить получившиеся библиотеки от других сборок GCC.

Также прискорбно, что нет задокументированного местоположения отображения набора инструментов, используемого для значения тега, кроме кода (см. BB common.jam строки от # 820 до # 861). *

...