Показаны сообщения с ярлыком Системы сборки проектов. Показать все сообщения
Показаны сообщения с ярлыком Системы сборки проектов. Показать все сообщения

вторник, 10 апреля 2012 г.

Пример заготовки CMakeList.txt для простого проекта


Введение в CMake


Утилита cmake является кроссплатформенной утилитой с открытым исходным кодом (open source), используемой для создания традиционных сценариев сборки проектов для следующих платформ.


  1. Unix/Linux -> Makefile (для утилиты GNU make)
  2. Windows -> VS Projects/Workspaces
  3. Apple -> Xcode

Процесс сборки проекта, при использовании cmake, состоит из следующих этапов.


  1. Создание файла конфигурации CMakeLists.txt в котором через систему команд, свойств и переменных описываются исходные файлы проекта, цель сборки и все сопутствующие сборке детали.
  2. Выполнение утилиты cmake. При это будет произведена обработка файла конфигурации CMakeLists.txt в процессе которой будет сгенерирован файл традиционного для данной операционной системы сценария сборки. Например, Makefile.
  3. Выполнение традиционных сценариев сборки. Например, утилитой make.

Используя специальные генераторы можно привязать систему CMake к определенным системам сборки, таким как Qt, Borland C++ Builder, MS Visual C++ и пр. Это свойство системы, само по себе интересно, но привязка кроссплатформенной сборки к какому-то конкретному продукту, выглядит, в общем случае, неразумно. Не считая, разумеется, вариант с поддержкой Qt SDK. Здесь особый разговор, так как сборка остается кроссплатформенной, но составляет альтернативу собственной системе сборки для Qt, qmake, которая не лишена некоторых недостатков.


Я вспоминаю о CMake всегда, когда не делаю проект в Qt. Вот почему.


  1. Проект не привязывается к какой-то среде разработке и его можно писать хоть в vim. Для небольших проектов это исключительно удобно. Для тех, кто относится к vim с предубеждением путь представят себе вместо vim любой другой редактор плоского кода с подсветкой синтаксиса, который им кажется удобным. Сейчас таких много под любой платформой.
  2. Проект удобно передавать в виде исходников для сборки у заказчика или какого-то иного лица потребляющего этот код. Удобно в контексте его простой компиляции. Не придется ставить среду разработки. Потребуется только наличие CMake, а это уже может быть много проще. Особенно с этим нет проблем в Linux.
  3. Сборка проекта по Makefile, который был сгенерирован системой CMake достаточно зрелищная. Во-первых, выполняется в цвете, а, во-вторых, с отображением процента исполнения.

Из написанного выше не следует, что CMake удобен только для небольших проектов. Просто большие проекты это дело особого обсуждения. Часто тут решение принимает не один человек и, в некоторых случаях, это решение определяется самой постановкой задачи. Зачем, например, городить огород, если задача заказана в MS Visual Studio и будет использована только там. В случае, если CMake допустим для проекта, то это позволит получить удобства описанные в списке выше.


Изучение системы CMake особая тема по которой через Google можно найти много статей и специальной документации. Цель данной статьи - дать простую заготовку конфигурационного файла системы CMake. Создавая в консоли новый проект надо будет просто скопировать эту заготовку и внести в нее изменения характерные для вашего проекта.


CMakeLists.txt для простого проекта


Итак, мы начали простой проект. Создали каталог my-project и создали в нем подкаталог src для размещения источников кода нашего проекта. Напишем заготовку в файл src/main.cpp и теперь настроим CMake для сборки по этому проекту. Потом мы будем добавлять в сборку новые файлы и, возможно, библиотеки. Отразим все эти возможности в нашей заготовке.


Конфигурационный файл для системы CMake должен называться CMakeLists.txt. Расположим его в каталоге my-project и получим следующую систему файлов.


my-project                - каталог проекта
my-project/src            - каталог источников проекта  
my-project/src/main.cpp   - исходный файл (пока один; только *.cpp файла)
my-project/CMakeLists.txt  - конфигурационный файл системы CMake 

Представим шаблон файла CMakeLists.txt для простого проекта.




cmake_minimum_required ( VERSION 2.6 )
# Укажите здесь имя вашего проекта.
# Учитываете установку переменных 
# <project_name>_BINARY_DIR и  <project_name>_SOURCE_DIR
# в значение имени каталога с проектом.
project ( project_name )

set ( SRC_DIR ${PROJECT_SOURCE_DIR}/src )

# Укажите вместо my-project имя своего приложения
# - имя исполняемого файла
set ( APP_NAME my-project )

# Управление типом сборки через задание значения
# предопределенной переменной CMAKE_BUILD_TYPE
# Возможные значения:
# DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL
set( CMAKE_BUILD_TYPE RELEASE )

# Снять комментарий для добавления пути на 
# заголовочные файлы, которые следует добавить 
# для компиляции проекта
#include_directories ( /path/to/headers_1 )
#include_directories ( /path/to/headers_2 )
# ...
#include_directories ( /path/to/headers_N )

# Снять комментарий для добавления пути на 
# библиотеки, которые следует добавить 
# для линковки проекта
#link_directories ( /path/to/lib_1 )
#link_directories ( /path/to/lib_2 )
# ...
#link_directories ( /path/to/lib_N )

list(APPEND SRC ${SRC_DIR}/main.cpp )
# снять комментарий для добавления других *.cpp файлов
# list(APPEND SRC ${SRC_DIR}/file_1.cpp )
# list(APPEND SRC ${SRC_DIR}/file_2.cpp )
# ...
# list(APPEND SRC ${SRC_DIR}/file_N.cpp )

add_executable ( ${APP_NAME} ${SRC} )

# Снять комментарий для добавления имени библиотеки
# требуемой для линковки проекта
#target_link_libraries( ${APP_NAME} name_1 )
#target_link_libraries( ${APP_NAME} name_2 )
# ...
#target_link_libraries( ${APP_NAME} name_N )



Рассмотрим значение представленных в файле команд.


cmake_minimum_required - выставляет требование по минимальной версии CMake, требуемой для обработки даного файла конфигурации.


project(<project_name>) - задает имя проекта. Необходимо учитывать, что дополнительной функцией данной команды является установка переменных <project_name>_BINARY_DIR и <project_name>_SOURCE_DIR в значение имени каталога проекта.


set - задает значение переменной для дальнейшего использования. Здесь создаем переменную SRC_DIR по значению подставленному из предопределенной переменной PROJECT_SOURCE_DIR и подстроки "/src". Чтобы получить значение переменной, её идентификатор надо поместить в фигурные скобки и предварить знаком доллара - ${...}.


include_directories - добавить указанный в скобках каталог к списку каталогов поиска заголовочных файлов. В одной команде можно указать несколько каталогов заголовочных файлов, разделив их пробелом.


link_directories - добавить указанный в скобках каталог к списку каталогов поиска библиотек для линковки. В одной команде можно указать несколько каталогов библиотек, разделив их пробелом.


list с первым аргументом APPEND выполняет добавление к списку, указанному вторым аргументом, элемента заданного третьим аргументом. В нашем случае, к списку под именем SRC добавлено имя файла main.cpp с путем, указанным значением переменной SRC_DIR.


add_executable - для сборки исполняемого файла представленного первым аргументом добавляет компиляционные листы, которые будут образованы по списку файлов источников, заданных вторым аргументом - значением списка SRC.


target_link_libraries - задает библиотеки для линковки. Исполняемый файл указывается первым аргументом. Например, если в Linux требуется указать для линковки приложения my-project библиотеки с именем файла libm.so, то следует написать target_link_libraries(my-project m), что соответствует общим правилам задания имени библиотек в опциях для линковки. В одной команде можно указать несколько библиотек, разделив их пробелом.


Представленный вариант файла CMakeList.txt можно взять как шаблон для своих проектов. Чтобы собрать такой проект, надо в каталоге с файлом CMakeLists.txt выполнить команду "cmake ." (не забудьте про точку, обозначающую синоним для имени текущего каталога - в нем будет осуществлён поиск файла CMakeLists.txt). По этой команде будет создан Makefile, который потом следует обработать утилитой make. Для этого надо просто выполнить команду "make".


Полезные ссылки


  1. http://www.cmake.org - официальный сайт системы CMake
  2. http://symmetrica.net/cmake/ - интересные подробности по CMake. В том числе использование для проектов wxWidget и Qt.
  3. При работе в Linux, документацию по установленной системе CMake можно посмотреть в каталоге /usr/share/doc/cmake-data.

Мои статьи по CMake.


  1. Boost и CMake для Windows
  2. Boost и CMake для Windows (подробности)

четверг, 24 ноября 2011 г.

Как начать работать с Ant




Введение


За последнюю неделю у меня два раза попросили рассказать об Ant. Решил, по этому поводу, написать несколько строчек для начинающих пользователей Ant и для тех, кто не знает, что это такое, но интересуется возможностями применения.

Ant это межплатформенное средство для исполнения специальных сценариев, которые могут выполнить достаточно широкий набор задач. Средство это межплатформенно ровно настолько, насколько межплатформенена Java, на которой он написан, и, собственно, для которой предназначен.

По сути своей работы Ant аналогичен известному средству обработки сценариев make. Обычно, многие программисты, работающие с Си/Си++ знакомы с make не понаслышке. Особенно это относится к программистам, которые работают в *nix. Однако make исполняет сценарии зависимые от платформы, или, если быть более точным, от командного процессора для которого они написаны.


Как работает Ant


Ant исполняет сценарии, которые, по умолчанию, располагаются в файле с названием build.xml. Как видно из расширения файла, его содержимое представлено в формате XML.

Корневым тегом документа является тег project. Проект состоит из целей - теги target, а цели состоят из задач. Задач для Ant определено несколько десятков. Каждая задача представлена своим тегом.

Вообще, синтаксис файла сценария для Ant достаточно прост и интуитивно понятен. Особенно, если знать основы его структуры.

Рассмотрим это на примере простого сценария. Приведем возможный вариант файла build.xml.

<project name='test' default='release' >

    <target name='spec' >
        <echo message='Target: spec' >
    </target> 

    <target name='release' >
        <echo message='Target: release' >
    </target> 

    <target name='debug' depends='spec' >
        <echo message='Target: debug' >
    </target> 

</project>  

Прокомментируем представленный вариант сценария.

Описывается проект с именем test, в котором целью по умолчанию объявляется цель release. Т.е., если запустить Ant без специального указания исполняемой цели, то, согласно этому сценарию, будет выполнена цель release.

Кроме цели release представлены еще цели debug и spec, причем, исполнение цели debug зависит от исполнения цели spec. Значит, если заказать исполнение цели debug, то сначала выполнится цель spec, и только в случае ее успешного исполнения будет выполнена цель debug.

Во всех трех представленных целях выполняется одна простейшая задача echo, которая выводит в стандартный выходной поток (в нашем случае, в консоль) сообщение заданное атрибутом message.

Теперь остановимся на исполнении этого сценария. В системе Ant, наверное, главной утилитой является утилита ant, которая и призвана исполнять сценарии. Давайте зайдем в командную строку и в директории, где расположен нужный нам файл build.xml выполним следующую команду.

$ ant

(символ $ означает стандартное приглашение пользователя в системах *nix, поэтому его вводить не надо. Для DOS/Windows это будет символ > )

Такой вызов ant приведет к исполнению стандартной цели сценария, которой, в нашем случае, является цель release. Следовательно, при исполнении нашего сценария, мы увидим следующее сообщение в консоли исполнения.

$ ant
Target: release

Чтобы выполнить цель debug нашего сценария, необходимо выполнить ant с аргументом debug.

$ ant debug
Target: spec
Target: debug

На этом можно закончить краткое введение в работу системы Ant.Следует лишь добавить, что мы коснулись лишь малой части возможностей Ant и если вы хотите познакомиться с Ant в оригинале, то просто найдите в Google родной сайт системы и получите всю необходимую информацию из первых рук.

Для ленивых я предложу несколько готовых ссылок (которые, разумеется, могут в любой момент устареть).
http://ant.apache.org/ - Официальный сайт системы Ant.
http://ant.apache.org/manual/index.html - Главная страница официальной документации по системе Ant. Для просмотра всего списка задач выберите раздел Ant Tasks -> List of Tasks.


Установка Ant


Если вы работаете в Linux, то проблемы с установкой Ant у вас не будет. Разумеется, при условии, что вы умеете пользоваться своим Linux. Обычно, все что нужно сделать это обратиться к своему установщику с просьбой установки Ant, и, после завершения его работы, можно будет сразу приступать к использованию Ant. Здесь проблем возникнуть не должно. Хотя, конечно могут быть и кривые дистрибутивы и кривые руки и даже кривые ноги, но стандартной рекомендации в этом случае дать не получится - разбирайтесь с /dev/head.

Я хочу остановиться подробнее на установке Ant под Windows, так как именно там не все так просто для новичков.

Сложность в том, что разработчики Ant не предоставляют к системе Windows специального native-инсталлятора, который бы решил все проблемы.

Скачайте нужную вам версию Ant с cайта разработчика. Если ссылка не устареет, то попробуйте сделать это со страницы http://ant.apache.org/bindownload.cgi. Скачайте более привычный для пользователей DOS/Windows архив с компрессией zip. Скачайте и распакуйте его средствами, которые вам доступны в вашей системе. Для эксперимента с Ant под Windows я скачал архив apache-ant-1.8.2-bin.zip.

Если вы хотите получить информацию об установке Ant во всех подробностях из первоисточника, то надо опять обратиться к соответствующему разделу сайта производителя Ant. На момент написания этих строк можно было воспользоваться адресом http://ant.apache.org/manual/index.html. На указанной странице нужно выбрать Installing Apache Ant -> Installing Ant.

Суть действий, которые там описаны я кратко изложу ниже.


Во-первых.

Назовём корневой директорией Ant директорию, в которой вы найдете поддиректории bin, lib, docs, etc и прочие объекты файловой системы, относящиеся к системе Ant.

Создайте системную переменную ANT_HOME и установите ее в значение корневой директории Ant.

Добавим в системные пути поддиректорию bin из корневой директории Ant. Это нужно для того, чтобы запускать ant и другие утилиты системы без указания их полного пути из любого места файловой системы.

Во-вторых.


Для работы Ant требуется Java. Причем, если мы хотим собирать средствами Ant проекты Java (а, как правило, именно для этого мы и ставим Ant), то нам нужен именно пакет JDK, содержащий средства компиляции, а не JRE, где содержатся только средства исполнения байт-кода Java.

Следовательно, в вашей системе, нужно иметь установленным JDK. Если у вас JDK не установлено, то скачайте и установите его. С этим, как правило, проблем не возникает.

Теперь нам следует сообщить системе Ant о расположении установленного в системе JDK. Для этого, следует установить системную переменную JAVA_HOME в значение директории, где лежит установленное JDK.

Также, имеет смысл добавить в список системных путей поддиректорию bin корневой директории JDK. Это упростит вам самим использование предоставляемых утилит JDK. 

В-третьих.

Нужно проследить, чтобы значение системной переменной CLASSPATH было пустым, либо не было определено вообще. Это требование Ant может расстроить тех, кто организует свое рабочее место определяя значение этой системной переменной.

ВАЖНО!!! При установке значений ANT_HOME и JAVA_HOME следите за тем, чтобы ни одно из значений не заканчивалось на символ разделителя директорий - "\" (DOS\Windows) или "/" (POSIX).

Для тех кто не знает как устанавливать системные переменные и расширять список системных путей (системная переменная PATH) подскажу, что в Windows их можно установить из панели управления. Для Windows XP, в классическом размещении инструментов панели, установку системных переменных надо искать в последовательности выбора "Панель управления -> Система -> Дополнительно -> Переменные среды -> Создать|Изменить Системные переменные".

Если верить докуменации Ant, то часть этой работы должен выполнить скрипт ant.bat из поддиректории bin корневой директории Ant. Я не пробовал.

Итак, в моем Windows XP были установлены следующие значения указанных переменных.

JAVA_HOME=C:\Program Files\Java\jdk1.7.0_01
ANT_HOME=C:\apache-ant-1.8.2
PATH=<прежний список путей>;C:\Program Files\Java\jdk1.7.0_01\bin;C:\apache-ant-1.8.2\bin

Чтобы проверить значение установленных переменных, следует открыть консоль Windows (Пуск->Выполнить->cmd) и исполнить команду echo передав ей значение системной переменной. Напомню, что если переменная называется xyz, то обратиться к ее значению в DOS\Windows можно взяв ее в знаки процента, т.е. написав %xyz% (В оригинальном *nix чуть проще - $xyz). Итак, посмотрим:

> echo %JAVA_HOME%
C:\Program Files\Java\jdk1.7.0_01

> echo %ANT_HOME%
C:\apache-ant-1.8.2

> echo %PATH%
<длинный список путей>;C:\Program Files\Java\jdk1.7.0_01\bin;C:\apache-ant-1.8.2\bin

> echo %CLASSPATH%
<должно быть пусто>

среда, 23 ноября 2011 г.

Boost и CMake для Windows (подробности)

Новичкам Boost и CMake посвящается ...

Для тех, кто только начинает осваивать кроссплатформенные средства о которых шел разговор в сообщении "Boost и CMake для Windows" этого блога, я решил добавить немного подробностей в обсуждаемую там тему.

Прежде всего, необходимо заметить, что операционная система Windows относится к сугубо проприентарным системам, и, видимо, как следствие этого, наиболее функциональной средой разработки кода под эту систему является Microsoft Visual Studio. Нравится это кому-нибудь или нет, можно обсуждать отдельно, но данный факт, видимо, не подлежит сомнению. Соответственно, нельзя обвинять софтверные компании в том, что предоставляя компилируемый продукт под Windows они предоставляют, прежде всего, средства компиляции, ориентированные именно на MSVS.

Boost

Набор библиотек Boost, сегодня, является полезным артефактом, который пока не нашел полное свое отражение в стандарте C++, хотя часть из списка библиотек набора Boost уже вошло в стандарт в виде TR1 (Technical Report). Так, если быть конкретным, то сегодня туда входят 10 библиотек, а формируемый стандарт C++0x даже несколько расширил этот десяток в своем TR1. Остальные библиотеки набора Boost (может быть не все, но большая часть) должны войти в стандарт C++0x в виде TR2.

Следует оговорить один, видимо устоявшийся, жаргонизм относительно Boost. Boost является именно набором библиотек, хотя, часто можно слышать использование термина "библиотека Boost" в применении ко всему Boost. Сам грешен, хотя и понимаю, что это не правильно.

Вообще, новичкам небезынтересно будет знать, что многие библиотеки Boost не имеют бинарных файлов, содержащих наборы функций, специфичных для данной среды исполнения, а потому не требуют компиляции.  Т.е. некоторые части Boost можно использовать в виде "как есть", без компиляции. Такие элементы Boost содержат в себе только *.hpp файлы. Для того чтобы их использовать нужно просто выполнить #include <boost/some_boost_lib/some_file.hpp> и указать компилятору путь размещения заголовочных файлов boost, эти файлы уже не были размещены по путям, известным компилятору. Однако, если требуемые вам части Boost основаны не только на *.hpp, но и поддержаны бинарниками, то их придется компилировать для вашей среды исполнения.

Так вот, если вернуться к теме установки Boost под Windows, то следует заметить следующий факт. Сложности, с которыми я столкнулся видимо имеют две основные причины. Во-первых, мои корявые руки, а, во-вторых, то, что я не использовал установку MSVS под которую, собственно, и была заточена инсталляция. Другими словами, я пытался откушать супа деревянной вилкой, что не есть правильно.

Работая и проживая долгие годы в Linux, я привык смотреть на вещи несколько иначе, нежели того требует работа с Windows. Отсюда, мои "корявые руки". Да и первоначальные проблемы были связан с недопониманием того, что надо было что-то делать с файлами Boost после того, как я их извлек из архива. В Linux я просто сообщаю установщику пакетов о том, что мне нужен boost и после того, как он мне скажет примерно следующее - "все исполнено, мой господин", я начинаю использовать библиотеки Boost. Т.е. в Linux я не перехожу из образа программиста в образ администратора с шаманским бубном для выполнения необходимых танцев и заклинаний.

Итак, я уже говорил, что после безуспешных попыток "откушать супа деревянной вилкой" я обнаружил наличие порта установки Boost через систему CMake. Это было решение проблемы в той ситуации, которую я сам себе создал.

CMake

Итак, я скачал себе Boost для CMake, извлек из скаченного архива исходный материал для компиляции, зашёл в корневую директорию полученной сборки и увидел там заветный файл CMakeLists.txt. Этот файл представляет собой сценарий компиляции для кроссплатформенной системы сборки CMake.

При обработке конфигурационного файла, система CMake использует, так называемые генераторы сборки, чтобы адаптировать сборку под требуемую систему компиляции. Приведу список известных генераторов сборки, которые я взял из документации к CMake 2.6, которая только что подвернулась мне по запросу в Google.

Вот такой вот список поддерживаемых на тот момент систем сборки. И все это на основе одного исходного материала, в котором указывается, фактически, цель сборки и список файлов, которые должны участвовать в сборке.

Так как я собирался делать сборку средствами установленной ранее MinGW, то я, вызывая утилиту cmake, сообщил ей явно о необходимости использования генератора "MinGW Makefiles". В противном случае, cmake начал бы работать согласно своим стандартным настройкам для той операционной системы, которую он обнаружил бы в начале своей работы.

Итак, чтобы подготовить сборку Boost для компиляции средствами MinGW, я выполнил в командной строке, в корневом каталоге Boost, где размещен центральный файл CMakeLists.txt, следующую команду.

> cmake -G "MinGW Makefiles"

В результате я получил Makefile, который должен был исполнить утилитой make, входящей в состав установленного MinGW. В моей системе это получилось выполнением следующей команды относительно директории с лежащим в ней сценарием сборки Makefile.

> mingw32-make

После того, как компиляция была закончена, в текущей директории появилась поддиректория lib с бинарными файлами библиотек Boost.

MinGW

Установить MinGW не сложно. Нужно просто скачать в сети инсталлятор нужной версии и запустить его.
 
Я использовал MinGW входящий в состав комплексного инсталлятора для среды разработки QtCreator под Windows, куда входила сама среда разработки QtCreator, средства Qt SDK и система компиляции MinGW.

Единственное, что может потребоваться, это установка путей на директорию bin установленной системы MinGW.

Так, например, так как я использовал MinGW, который был инкапсулирован в среду разработки и компиляции программ написанных на Qt в среде разработки QtCreator, то информация об установленном MinGW не была объявлена операционной системе в виде путей. Это как раз тот случай, когда это понадобится сделать самому, иначе CMake не будет отрабатывать заданный генератор, и вызвать mingw32-make без указания полного пути не удастся.

В своей системе, мне понадобилось добавить в системные пути путь "C:\Qt\qtcreator-2.3.1\mingw\bin".

Использование Boost.

У новичков могут возникнуть вопросы по использованию скомпилированного Boost.

В зависимости от используемой вами среды разработки и системы сборки проекта это может выглядеть по разному, но суть всегда одинакова. Надо сделать три вещи.
1. Указать путь до включаемых файлов Boost там, где указываются пути до include-файлов.
2. Указать путь до скомпилированных файлов, помещенных в каталог lib, там, где указываются пути до файлов библиотек.
3. Указать имя библиотеки из Boost, которую вы собираетесь использовать, там, где указываются библиотеки для линковки с объектными файлами вашей программы.

вторник, 22 ноября 2011 г.

Boost и CMake для Windows

Случилось так, что занялся я одной кроссплатформенной задачкой на C++. Обычно, я такие задачи делаю на привычной мне связке C++/Qt, но это был случай, когда о Qt надо было забыть.

Очень скоро споткнулся на проблеме управления файловой системой. Меня удивили, что стандартные средства C/C++ не предоставляют в своих библиотеках средств для решения этой проблемы. В результате - серьезная кроссплатформенная проблема. Конечно же, решением, является boost. Хотя это очень не понравилось заказчику.

Надо заметить, что заказчик выполнял проверку системы под Windows, а программирование я выполнял в родном Linux.

Уже давно забыв про кошмары "народной операционной системы" я долго не понимал заказчика. Казалось бы, в чем проблема. Поставишь себе CMake для сборки представленного кода, установишь boost, подправишь каталог размещения boost и будет всем счастье.

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

С установкой CMake особых проблем не было. Была только наша взаимная нелюбовь с операционной системой, которая вылилась в проблемы, которые я сам себе создал.

Проблемы начались с установки библиотеки boost. Скачав архив библиотеки с центрального сайта я столкнулся с тем, что никак не мог выполнить сборку бинарной части библиотеки средствами MinGW. Ни заказчик, ни я не питали нежных чувств к Microsoft Visual Studio, поэтому о MSVC речи даже не шло. Потом, на факультативных началах я бы мог доиграть конфиг CMake под компиляцию нашего проекта и на MSVC, но на том этапе об этом речь не стояла.

К сожалению, в официальной документации к boost я не нашел рабочих решений для сборки библиотеки не средствами MSVC, поэтому я обратился к мантровым архивам Google в поисках необходимых заклинаний. Что-то начало получаться, но до конца дело так и не доходило. На каждом шагу меня ждали неожиданности. И, к сожалению, неожиданности неприятные.

Я уже готов был статься, когда заметил в официальной документации замечание о существовании порта boost для сборки средствами CMake.

https://svn.boost.org/trac/boost/wiki/CMake - вот спасительный ресурс. Его можно легко найти в google по запросу "boost cmake".

Я скачал архив нужной версии, распаковал его и в его главном каталоге, обнаружив центральный файл сборки CMakeLists.txt я выполнил

> cmake -G "MinGW Makefiles"

Родной cmake, пошуршав немного файлами сообщил об успешной генерации Makefile, который я выполнил средствами make из пакета MinGW, который поставил ранее. У меня это была команда

> mingw32-make

которую я исполнил в каталоге созданного Makefile.

Разумеется, для того, чтобы это сработало нужно установить MinGW и сообщить в путях системы о положении его каталога bin. Я использовал MinGW из сборки QtCreator.

Как и положено, сборка библиотеки выполнялась заметное время. Красочный цветной сценарий созданный cmake выполнялся красиво, сообщая о текущем выполненном проценте сборки. После компиляции я увидил заветный каталог lib с бинарными библиотеками boost.