Среда сборки C ++ с использованием MinGW-w64 и Boost.Build - PullRequest
7 голосов
/ 09 января 2012

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

Я столкнулся с проблемой вНастройка моей среды сборки, хотя.В настоящее время мой проект использует библиотеки 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 таким образом, чтобы он выбирал правильный набор инструментов на основе флага модели адреса?Если нет, какой мой следующий лучший вариант?

РЕДАКТИРОВАТЬ:

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

РЕДАКТИРОВАТЬ:

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

Ответы [ 3 ]

5 голосов
/ 16 января 2012

Вы можете выбрать любой набор инструментов 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 ;

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

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

b2 toolset=gcc address-model=64

Для использования 64-битного компилятора mingw.

3 голосов
/ 11 января 2012

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

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

с использованием 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 голосов
/ 11 января 2012

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

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

...