вторник, 29 октября 2013 г.

boost. Компиляция с помощью gcc (mingw) в Windows

Оставим вводную в стороне и сразу за дело. На компьютере с Windows, где мне предстояло установить библиотеки boost, уже был установлен Qt, поэтому при сборке использовался mingw из комплекта Qt. Однако, ничто не мешает взять последнюю версию mingw отсюда. Итак, распаковываем скачанный архив boost и готовимся к сборке. Подготовка подразумевает правку файла bootstrap.bat и создание еще одного батника, назовем его build.bat. У меня содержимое этих файлов вышло следующее.

bootstrap.bat
@ECHO OFF

REM Copyright (C) 2009 Vladimir Prus
REM
REM Distributed under the Boost Software License, Version 1.0.
REM (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)

SET MINGWDIR=c:\Qt\Qt5.1.1\Tools\mingw48_32\bin\
SET BOOSTDIR=c:\boost\1.54.0\
SET PATH=%MINGWDIR%;PATH

ECHO Building Boost.Build engine
if exist ".\tools\build\v2\engine\bin.ntx86\b2.exe" del tools\build\v2\engine\bin.ntx86\b2.exe
if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" del tools\build\v2\engine\bin.ntx86\bjam.exe
if exist ".\tools\build\v2\engine\bin.ntx86_64\b2.exe" del tools\build\v2\engine\bin.ntx86_64\b2.exe
if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" del tools\build\v2\engine\bin.ntx86_64\bjam.exe
pushd tools\build\v2\engine

call .\build.bat gcc > ..\..\..\..\bootstrap.log
@ECHO OFF

popd

if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" (
   copy .\tools\build\v2\engine\bin.ntx86\b2.exe . > nul
   copy .\tools\build\v2\engine\bin.ntx86\bjam.exe . > nul
   goto :bjam_built)

if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" (
   copy .\tools\build\v2\engine\bin.ntx86_64\b2.exe . > nul
   copy .\tools\build\v2\engine\bin.ntx86_64\bjam.exe . > nul
   goto :bjam_built)

goto :bjam_failure

:bjam_built

REM Ideally, we should obtain the toolset that build.bat has
REM guessed. However, it uses setlocal at the start and does
REM export BOOST_JAM_TOOLSET, and I don't know how to do that
REM properly. Default to msvc for now.
set toolset=msvc

ECHO import option ; > project-config.jam
ECHO. >> project-config.jam
ECHO using %toolset% ; >> project-config.jam
ECHO. >> project-config.jam
ECHO option.set keep-going : false ; >> project-config.jam
ECHO. >> project-config.jam

ECHO.
ECHO Bootstrapping is done. To build, run:
ECHO.
ECHO     .\b2
ECHO.    
ECHO To adjust configuration, edit 'project-config.jam'.
ECHO Further information:
ECHO.
ECHO     - Command line help:
ECHO     .\b2 --help
ECHO.     
ECHO     - Getting started guide: 
ECHO     http://boost.org/more/getting_started/windows.html
ECHO.     
ECHO     - Boost.Build documentation:
ECHO     http://www.boost.org/boost-build2/doc/html/index.html

goto :end

:bjam_failure

ECHO.
ECHO Failed to build Boost.Build engine.
ECHO Please consult bootstrap.log for furter diagnostics.
ECHO.
ECHO You can try to obtain a prebuilt binary from
ECHO.
ECHO    http://sf.net/project/showfiles.php?group_id=7586^&package_id=72941
ECHO.
ECHO Also, you can file an issue at http://svn.boost.org 
ECHO Please attach bootstrap.log in that case.

goto :end

:end
В этом файле, по сравнению с оригинальным, добавлены строки
SET MINGWDIR=c:\Qt\Qt5.1.1\Tools\mingw48_32\bin\
SET BOOSTDIR=c:\boost\1.54.0\
SET PATH=%MINGWDIR%;PATH
И изменена строка
call .\build.bat gcc > ..\..\..\..\bootstrap.log

build.bat
SET MINGWDIR=c:\Qt\Qt5.1.1\Tools\mingw48_32\bin\
SET BOOSTDIR=c:\boost\1.54.0\

SET PATH=%BOOSTDIR%;%MINGWDIR%;PATH
CD %BOOSTDIR%
b2.exe --build-dir=%BOOSTDIR% toolset=gcc --build-type=complete stage

После того, как необходимые файлы отредактированы/созданы, приступаем к сборке. Для этого необходимо запустить сначала bootstrap.bat, который произведет компиляцию утилит автоматизации сборки библиотеки boost, а затем - созданный нами build.bat, который запустит сборку самой boost.
В общем-то и все. Скомпилированные библиотеки можно будет найти в каталоге stage.

Первоисточник: http://studff.ru/blog/programming/85.html.

UPD 18.12.2014

Заглянул в статистику своего блога и был удивлен популярностью данной статьи. На сегодняшний день, при актуальной версии boost 1.57, подобных манипуляций делать уже не нужно. Имея установленный MinGW, boost можно спокойно собрать буквально двумя командами (из каталога с исходниками).
bootstrap mingw
b2 toolset=gcc --build-type=complete

UPD 24.04.2017

Рекомендуется к прочтению заметка boost. Компиляция с помощью gcc (mingw) в Windows. Более простой метод

2 комментария:

  1. Премного благодарен! Вовремя я на Ваш блог наткнулся.

    ОтветитьУдалить
  2. Очень рад, что вам эта заметка пригодилась. С некоторых пор я решил выкладывать сборки boost под win (mingw) на sourceforge http://pa2311.blogspot.ru/2014/11/boost-for-windows-mingw.html. Так что можете сэкономить время на компиляции.

    ОтветитьУдалить