вторник, 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.


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

Игорь комментирует...

У boost своя система сборки, называется bjam. На MinGW boost собирается без проблем, посмотрите хотя бы здесь http://www.forum.crossplatform.ru/index.php?s=&showtopic=5847&view=findpost&p=46343.
Кстати, присмотритесь к этому форуму. Я Вам его уже не раз рекламировал. Там целый раздел по boost

knzsoft комментирует...

Про bjam слышал, но не придал значения. За ссылку спасибо. При следующей необходимости, наверное, воспользуюсь. А вообще, хочется от души добавить, что "без проблем" это когда открыл архив с присланными исходниками, открыл README из трех строчек, увидел там простую инструкцию из трех команд, запустил их и сидишь радуешься. Если же нужно читать много буков, гуглить часами Интернет в поисках какой-нибудь полезной заметки в блоге или на форуме и только после этого иметь счастье, пусть даже одно тупопростой командой, то это уже не гуд, и от этого рождаются вопросы и растет недоумение. Я, периодически работая с boost уже много лет в Linux, не был готов к тому, что столкнусь с тем, о чем написал в блоге.