2012-01-09 4 views
7

В настоящее время я переношу один из моих проектов в GCC, и я использую проект MinGW-w64 для выполнения этого, поскольку мне требуется поддержка как x64, так и x86.C++ Build Environment с использованием MinGW-w64 и Boost.Build

Я столкнулся с проблемой при настройке моей среды сборки. В моем проекте в настоящее время используются библиотеки Boost C++, и для упрощения процесса сборки я использую Boost.Build в моем проекте (так как это упрощает интеграцию).

Под MSVC это хорошо, потому что можно сделать следующее из командной строки:

b2 toolset=msvc address-model=32 # compile as 32-bit 
b2 toolset=msvc address-model=64 # compile as 64-bit 

MinGW-w64 делает это «проблематичным», так как 32-битовые и 64-битовые компилированные инструменты размещены в отдельных каталогах. (C: \ MinGW32 и C: \ MinGW64 соответственно).

Возможно ли установить Boost.Build таким образом, чтобы он выбрал правильную инструментальную цепочку на основе флага адресной модели? Если нет, то каков мой следующий лучший вариант?

EDIT:

Если это поможет, я использую rubenvb 4.6.3-1 строит с сайта MinGW-w64 в «Personal Строит» папку (я использую эти сборки, в частности, как я хочу попробуйте разобрать мой код, но не компилировать - под Clang).

EDIT:

Одно из решений я просто подумали, что было бы «вручную» установить PATH, чтобы указать на правильный набор инструментов до компиляции, но это добавляет дополнительный уровень усложнения моего процессу сборки, который я бы как избежать. В идеале я хотел бы, чтобы это было так же просто, как и для MSVC, хотя я понимаю, что это может быть невозможно. В худшем случае я предполагаю, что то, что я только что предложил, будет работать, и мне просто нужно добавить скрипты, чтобы правильно установить PATH перед вызовом Boost.Build. Это означало бы hardcoding путь, который я не хочу делать ...

ответ

5

Yo может сделать любой набор инструментов Boost.Build выбранным на основе набора подходящих свойств, добавив требование набора инструментов (с правилом toolset.add-requirements). В некоторых инструментах есть встроенная поддержка, например darwin.jam (Xcode), но, к сожалению, мы еще не добавили это в набор инструментов gcc. Но при объявлении наборов инструментов вы можете использовать тот же минимальный код в своем user-config.jam.Для вас случае может выглядеть следующим образом:

import toolset ; 

using gcc : gcc-4.6.3~32 : /path/to/32bit/mingw/gcc ; 
using gcc : gcc-4.6.3~64 : /path/to/64bit/mingw/gcc ; 

# Add a global target requirements to "choose" the toolset based on the address model. 
toolset.add-requirements <toolset>gcc-4.6.3~32:<address-model>32 ; 
toolset.add-requirements <toolset>gcc-4.6.3~64:<address-model>64 ; 

Это имеет эффект добавления данного условного требования к все цели. Что влияет на выбор конкретной цели для определенного объявленного набора инструментов по мере необходимости.

..Forgot, чтобы упомянуть .. Несмотря на то, что это создание двух разных объявлений набора инструментов, по-умолчанию по-прежнему выбирается динамически. Можно использовать обычную командную строку:

b2 toolset=gcc address-model=64 

Использовать компилятор 64 бит.

3

Поскольку двоичные файлы MinGW имеют разные названия, вы должны иметь возможность включать каталоги стендов в путь, а затем добавить два разных набора инструментов в замятие где вы указываете точные имена двоичных файлов (исключая путь).

В конфигурационном файле добавьте следующие строки на основе формата

с использованием GCC: [версия]: [C++ - компиляция команда]: [опция компилятора];

using gcc : 32 : mingw-w32-1.0-bin_i686-mingw ; 
using gcc : 64 : mingw-w64-1.0-bin_i686-mingw ; 

Затем вы должны быть в состоянии назвать b2, как это:

b2 toolset=gcc-32 
bt toolset=gcc-64 
+0

Есть ли способ сделать что-то подобное без добавления префикса к toolchain? Я хотел бы использовать имя привязки по умолчанию и определить 32/64-разрядную часть с помощью флага адресной модели. – RaptorFactor

+0

, например. b2 toolset = gcc address-model = 32 – RaptorFactor

+0

Не то, что я знаю, адресная модель, очевидно, не поддерживается в качестве аргумента для mingw-gcc. Могу ли я спросить, почему использование address-model = 32 лучше в вашем случае? – Kristofer

0

MinGW-w64 может построить 32 и 64 бит двоичных файлов.

Я использую tdm-mingw с инструментами mingw64 и передаю только -m32 или -m64 в компоновщик/компилятор для выбора версии. В бинарниках по умолчанию 64 бита строятся.

+0

К сожалению, не все MinGW -w64.Так как уже было сказано в моем вопросе, я использую сборки rubenvb, которые не являются multilib, поэтому у меня две установки: одна для 32-битной инструментальной цепочки и одна для 64-битной инструментальной цепочки. 64-битная инструментальная цепочка может создавать только 64-битные двоичные файлы, а 32-битная инструментальная цепочка может создавать только 32-битные двоичные файлы. – RaptorFactor

Смежные вопросы