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