<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Личный опыт разработки ПО &#187; Разработка</title>
	<atom:link href="http://www.devexp.ru/category/razrabotka/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.devexp.ru</link>
	<description>Сборник рецептов</description>
	<lastBuildDate>Tue, 15 Nov 2011 18:38:30 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Архивирование с библиотеками zlib и bzip2/libbzip2 используя Boost Iostreams</title>
		<link>http://www.devexp.ru/2010/03/arxivirovanie-s-bibliotekami-zlib-i-bzip2libbzip2-ispolzuya-boost-iostreams/</link>
		<comments>http://www.devexp.ru/2010/03/arxivirovanie-s-bibliotekami-zlib-i-bzip2libbzip2-ispolzuya-boost-iostreams/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 19:59:18 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Boost]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/03/arxivirovanie-s-bibliotekami-zlib-i-bzip2libbzip2-ispolzuya-boost-iostreams/</guid>
		<description><![CDATA[Недавно у меня возникла задача добавить сжатие данных в программу. Сразу нашлось две свободных библиотеки – zlib и libbzip2 написанные на C. Изучив вопрос глубже, оказалось что писать удобные обертки над функциями на C не нужно, так как в Boost IOStreams все уже написано.
О том как добавить данный функционал и правильно собрать проект я расскажу [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно у меня возникла задача добавить сжатие данных в программу. Сразу нашлось две свободных библиотеки – <a href="http://zlib.net/" target="_blank">zlib</a> и <a href="http://www.bzip.org/" target="_blank">libbzip2</a> написанные на C. Изучив вопрос глубже, оказалось что писать удобные обертки над функциями на C не нужно, так как в <a href="http://www.boost.org/doc/libs/1_42_0/libs/iostreams/doc/index.html" target="_blank">Boost IOStreams</a> все уже написано.</p>
<p>О том как добавить данный функционал и правильно собрать проект я расскажу в данной заметке. Также будет приведен пример кода для сжатия и распаковки файлов и сравнение zlib (алгоритм <strong>DEFLATE</strong>, методы <strong>gzip</strong> и <strong>zlib</strong>) и libbzip2 (алгоритм <strong>bzip2</strong>) по скорости работы и уровню сжатия тестовых, бинарных и исполняемых файлов.</p>
<p> <p style="text-align: right"><a href="http://www.devexp.ru/2010/03/arxivirovanie-s-bibliotekami-zlib-i-bzip2libbzip2-ispolzuya-boost-iostreams/">Читать дальше...</a></p><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/03/arxivirovanie-s-bibliotekami-zlib-i-bzip2libbzip2-ispolzuya-boost-iostreams/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/03/arxivirovanie-s-bibliotekami-zlib-i-bzip2libbzip2-ispolzuya-boost-iostreams/#comments">Нет комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/c/" title="Просмотреть все записи в C++" rel="category tag">C++</a>,  <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/03/arxivirovanie-s-bibliotekami-zlib-i-bzip2libbzip2-ispolzuya-boost-iostreams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Полезные переменные CMake</title>
		<link>http://www.devexp.ru/2010/03/poleznye-peremennye-cmake/</link>
		<comments>http://www.devexp.ru/2010/03/poleznye-peremennye-cmake/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 20:14:35 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Сборка]]></category>
		<category><![CDATA[CMake]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/03/poleznye-peremennye-cmake/</guid>
		<description><![CDATA[Крайне полезная информация по переменным CMake находится по адресу http://www.cmake.org/Wiki/CMake_Useful_Variables. После прочтения сами собой отпадают многие вопросы.
Ну и напомню, что содержимое переменной XXX можно посмотреть:

message (${XXX})

И изменить:

set (XXX ${XXX} значение)

А также проверить присутствует ли в переменной определенная подстрока:

if (XXX MATCHES &#34;подстрока&#34;)
	...
endif ()

Если нужно изменить часть содержимого переменной (например флаг компилятора), то на помощь придут регулярные [...]]]></description>
			<content:encoded><![CDATA[<p>Крайне полезная информация по переменным CMake находится по адресу <a href="http://www.cmake.org/Wiki/CMake_Useful_Variables" target="_blank">http://www.cmake.org/Wiki/CMake_Useful_Variables</a>. После прочтения сами собой отпадают многие вопросы.</p>
<p>Ну и напомню, что содержимое переменной XXX можно посмотреть:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">message</span> <span style="color: #197d8b;">(</span><span style="color: #b08000;">${XXX}</span><span style="color: #197d8b;">)</span></pre></div></div>

<p>И изменить:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">set</span> <span style="color: #197d8b;">(</span>XXX <span style="color: #b08000;">${XXX}</span> значение<span style="color: #197d8b;">)</span></pre></div></div>

<p>А также проверить присутствует ли в переменной определенная подстрока:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">if</span> <span style="color: #197d8b;">(</span>XXX <span style="color: #077807; font-sytle: italic;">MATCHES</span> <span style="color: #912f11;">&quot;подстрока&quot;</span><span style="color: #197d8b;">)</span>
	...
<span style="color: #1f3f81; font-style: bold;">endif</span> <span style="color: #197d8b;">()</span></pre></div></div>

<p>Если нужно изменить часть содержимого переменной (например флаг компилятора), то на помощь придут регулярные выражения:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">string</span> <span style="color: #197d8b;">(</span><span style="color: #077807; font-sytle: italic;">REGEX</span> <span style="color: #077807; font-sytle: italic;">REPLACE</span> /W[0-4] /W4 CMAKE_CXX_FLAGS <span style="color: #b08000;">${CMAKE_CXX_FLAGS}</span><span style="color: #197d8b;">)</span></pre></div></div>

<p>В данном случае будет установлен максимальный уровень предупреждений <strong>/W4</strong> для компилятора от Microsoft.</p>
<img src="http://www.devexp.ru/?ak_action=api_record_view&id=69&type=feed" alt="" /><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/03/poleznye-peremennye-cmake/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/03/poleznye-peremennye-cmake/#comments">9 комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>,  <a href="http://www.devexp.ru/category/razrabotka/sborka/" title="Просмотреть все записи в Сборка" rel="category tag">Сборка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/03/poleznye-peremennye-cmake/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Чтение настроек приложения</title>
		<link>http://www.devexp.ru/2010/02/chtenie-nastroek-prilozheniya/</link>
		<comments>http://www.devexp.ru/2010/02/chtenie-nastroek-prilozheniya/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 14:23:07 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Конфигурирование]]></category>
		<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Boost]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/02/chtenie-nastroek-prilozheniya/</guid>
		<description><![CDATA[Мне часто приходится писать гибко конфигурируемые программы. Конфигурационные файлы часто получаются довольно сложными, с развитой иерархией. Для хранения настроек я использовал XML файлы, а разбор конфигурации делал вручную.
Недавно (с версии 1.41.0) в Boost появилась библиотека Property Tree, предназначенная для решения данной задачи. Помимо поддержки XML, также поддерживаются форматы INI, JSON и свой формат INFO. 
В [...]]]></description>
			<content:encoded><![CDATA[<p>Мне часто приходится писать гибко конфигурируемые программы. Конфигурационные файлы часто получаются довольно сложными, с развитой иерархией. Для хранения настроек я использовал <strong>XML</strong> файлы, а разбор конфигурации делал вручную.</p>
<p>Недавно (с версии 1.41.0) в <strong>Boost</strong> появилась библиотека <a href="http://www.boost.org/doc/libs/1_42_0/libs/property_tree/index.html" target="_blank">Property Tree</a>, предназначенная для решения данной задачи. Помимо поддержки <strong>XML</strong>, также поддерживаются форматы <strong>INI</strong>, <strong>JSON</strong> и свой формат <strong>INFO</strong>. </p>
<p>В данной заметке я рассмотрю указанные форматы и приведу код для разбора файла.</p>
<p> <p style="text-align: right"><a href="http://www.devexp.ru/2010/02/chtenie-nastroek-prilozheniya/">Читать дальше...</a></p><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/02/chtenie-nastroek-prilozheniya/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/02/chtenie-nastroek-prilozheniya/#comments">6 комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/c/" title="Просмотреть все записи в C++" rel="category tag">C++</a>,  <a href="http://www.devexp.ru/category/razrabotka/configuration/" title="Просмотреть все записи в Конфигурирование" rel="category tag">Конфигурирование</a>,  <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/02/chtenie-nastroek-prilozheniya/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Использование Doxygen для документирования кода</title>
		<link>http://www.devexp.ru/2010/02/ispolzovanie-doxygen-dlya-dokumentirovaniya-koda/</link>
		<comments>http://www.devexp.ru/2010/02/ispolzovanie-doxygen-dlya-dokumentirovaniya-koda/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 20:00:51 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[Документирование]]></category>
		<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Doxygen]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/02/ispolzovanie-doxygen-dlya-dokumentirovaniya-koda/</guid>
		<description><![CDATA[
Написание документации к коду задача не самая простая и уж точно не самая приятная, но к счастью существуют инструменты которые могут существенно упростить эту процедуру. Для этих целей я использую инструмент Doxygen и именно о нем пойдет речь.
Что такое Doxygen?
Doxygen – это кроссплатформенная система документирования кода с поддержкой языков C++, C, Java, Objective-C, PHP, C# [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doxygen.org/" target="_blank"><img src="http://www.devexp.ru/wp-content/uploads/2010/02/doxygen.png" /></a>
<p>Написание документации к коду задача не самая простая и уж точно не самая приятная, но к счастью существуют инструменты которые могут существенно упростить эту процедуру. Для этих целей я использую инструмент <strong>Doxygen</strong> и именно о нем пойдет речь.</p>
<h2>Что такое Doxygen?</h2>
<p>Doxygen – это кроссплатформенная система документирования кода с поддержкой языков C++, C, Java, Objective-C, PHP, C# (список можно уточнить на <a href="http://www.doxygen.org/" target="_blank">сайте проекта</a>).</p>
<p>Для создания документации достаточно просто писать комментарии в коде, придерживаясь нескольких простых правил. </p>
<p>Doxygen умеет анализировать исходный код проекта и создавать удобную документацию в формате HTML, Latex, RTF, XML, man, CHM.</p>
<h2>Общие соображения</h2>
<ol>
<li>Написание документации должно быть максимально простым, чтобы разработчики не &quot;забывали&quot; это делать. Отсюда вывод, что сложность форматирования комментариев должна быть минимальной.
<p>Хорошо:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">namespace</span> A
<span style="color: #008000;">&#123;</span>
<span style="color: #ff0000; font-style: italic;">/**
Имя класса
&nbsp;
Описание класса
*/</span>
	<span style="color: #0000ff;">class</span> B
	<span style="color: #008000;">&#123;</span>
	<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Плохо:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">namespace</span> A
<span style="color: #008000;">&#123;</span>
	<span style="color: #ff0000; font-style: italic;">/**
	 * Имя класса
	 * 
	 * Описание класса
	 */</span>
	<span style="color: #0000ff;">class</span> B
	<span style="color: #008000;">&#123;</span>
	<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Почему второй вариант хуже? Очевидно, из-за необходимости выравнивать комментарии на одном уровне с комментируемой сущностью, а также из-за избыточных символов <strong>*</strong>. Это может показаться надуманным, но при написании комментариев из нескольких строк проблема проявляется, а при поддержке кода и вовсе становится кошмаром. Вы можете возразить, что подобный стиль делает код &quot;рваным&quot;, но в любом случае комментирование интерфейсов делает код менее читаемым. К счастью все современные редакторы кода позволяют легко свернуть блоки с комментариями, что позволит взглянуть на код без помех.</p>
</li>
<li>Много документации – плохо, так как мало кто будет читать длинные мануалы. Из этого следует, что документированы должны быть только открытые (public) и защищенные (protected) интерфейсы. Закрытые (private) интерфейсы – часть внутренней реализации и не должны быть в руководстве. </li>
</ol>
<p><p style="text-align: right"><a href="http://www.devexp.ru/2010/02/ispolzovanie-doxygen-dlya-dokumentirovaniya-koda/">Читать дальше...</a></p><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/02/ispolzovanie-doxygen-dlya-dokumentirovaniya-koda/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/02/ispolzovanie-doxygen-dlya-dokumentirovaniya-koda/#comments">11 комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/razrabotka/documentation/" title="Просмотреть все записи в Документирование" rel="category tag">Документирование</a>,  <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/02/ispolzovanie-doxygen-dlya-dokumentirovaniya-koda/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Скорость CMake</title>
		<link>http://www.devexp.ru/2010/02/skorost-cmake/</link>
		<comments>http://www.devexp.ru/2010/02/skorost-cmake/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 17:33:25 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Сборка]]></category>
		<category><![CDATA[CMake]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/02/skorost-cmake/</guid>
		<description><![CDATA[Некоторые интересуются, а как же у CMake со скоростью? Субъективно все достаточно быстро, если же говорить о цифрах, то один из разработчиков Quantum GIS приводит в своем блоге сравнение скорости сборки их проекта с CMake и с Autotools. Цифры конечно впечатляют – так хорошо, что даже странно. Смотрите сами:
http://blog.qgis.org/?q=node/16


Copyright &#169; 2010, Личный опыт разработки ПО. [...]]]></description>
			<content:encoded><![CDATA[<p>Некоторые интересуются, а как же у CMake со скоростью? Субъективно все достаточно быстро, если же говорить о цифрах, то один из разработчиков Quantum GIS приводит в своем блоге сравнение скорости сборки их проекта с <strong>CMake</strong> и с <strong>Autotools</strong>. Цифры конечно впечатляют – так хорошо, что даже странно. Смотрите сами:</p>
<p><a title="http://blog.qgis.org/?q=node/16" href="http://blog.qgis.org/?q=node/16">http://blog.qgis.org/?q=node/16</a></p>
<img src="http://www.devexp.ru/?ak_action=api_record_view&id=60&type=feed" alt="" /><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/02/skorost-cmake/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/02/skorost-cmake/#comments">Нет комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>,  <a href="http://www.devexp.ru/category/razrabotka/sborka/" title="Просмотреть все записи в Сборка" rel="category tag">Сборка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/02/skorost-cmake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Определение операционной системы с CMake</title>
		<link>http://www.devexp.ru/2010/02/opredelenie-versii-sistemy-s-cmake/</link>
		<comments>http://www.devexp.ru/2010/02/opredelenie-versii-sistemy-s-cmake/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 18:29:53 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Сборка]]></category>
		<category><![CDATA[CMake]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/02/opredelenie-versii-sistemy-s-cmake/</guid>
		<description><![CDATA[Часто при сборке кроссплатформенного приложения необходимо знать на какой платформе выполняется сборка. Это нужно для включения определенных файлов специфичных для конкретной платформы, например средства межпроцессного взаимодействия для Linux или для Windows.
Для определения типа платформы существует несколько переменных:

UNIX – системы соответствующие стандарту POSIX (например Linux, FreeBSD или MAC OS X), включает CygWin 
WIN32 – понятно без [...]]]></description>
			<content:encoded><![CDATA[<p>Часто при сборке кроссплатформенного приложения необходимо знать на какой платформе выполняется сборка. Это нужно для включения определенных файлов специфичных для конкретной платформы, например средства межпроцессного взаимодействия для Linux или для Windows.</p>
<p>Для определения типа платформы существует несколько переменных:</p>
<ul>
<li>UNIX – системы соответствующие стандарту POSIX (например Linux, FreeBSD или MAC OS X), включает CygWin </li>
<li>WIN32 – понятно без комментариев </li>
</ul>
<p>Зная это легко проделать нужные действия:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">if</span> <span style="color: #197d8b;">(</span>WIN32<span style="color: #197d8b;">)</span>
	<span style="color: #1f3f81; font-style: bold;">set</span> <span style="color: #197d8b;">(</span>SOURCES <span style="color: #b08000;">${SOURCES}</span> win_pipe.cpp<span style="color: #197d8b;">)</span>
<span style="color: #1f3f81; font-style: bold;">elseif</span> <span style="color: #197d8b;">(</span>UNIX<span style="color: #197d8b;">)</span>
	<span style="color: #1f3f81; font-style: bold;">set</span> <span style="color: #197d8b;">(</span>SOURCES <span style="color: #b08000;">${SOURCES}</span> posix_pipe.cpp<span style="color: #197d8b;">)</span>
<span style="color: #1f3f81; font-style: bold;">else</span> <span style="color: #197d8b;">()</span>
	<span style="color: #1f3f81; font-style: bold;">message</span> <span style="color: #197d8b;">(</span><span style="color: #077807; font-sytle: italic;">FATAL_ERROR</span> <span style="color: #912f11;">&quot;Неизвестная система&quot;</span><span style="color: #197d8b;">)</span>
<span style="color: #1f3f81; font-style: bold;">endif</span> <span style="color: #197d8b;">()</span></pre></div></div>

<p>Обратите внимание, что команда <strong>message </strong>с ключом <strong>FATAL_ERROR</strong> выводит сообщение и прекращает выполнение работы.</p>
<p>Иногда этого бывает мало и необходимо точно определить тип системы или даже дистрибутив и его версию. Для этих целей можно использовать переменную <strong>CMAKE_SYSTEM</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">if</span> <span style="color: #197d8b;">(</span><span style="color: #b08000;">${CMAKE_SYSTEM}</span> <span style="color: #077807; font-sytle: italic;">MATCHES</span> <span style="color: #912f11;">&quot;Linux&quot;</span><span style="color: #197d8b;">)</span>
	<span style="color: #1f3f81; font-style: bold;">message</span> <span style="color: #197d8b;">(</span><span style="color: #912f11;">&quot;Linux&quot;</span><span style="color: #197d8b;">)</span>
	<span style="color: #1f3f81; font-style: bold;">if</span> <span style="color: #197d8b;">(</span><span style="color: #b08000;">${CMAKE_SYSTEM}</span> <span style="color: #077807; font-sytle: italic;">MATCHES</span> <span style="color: #912f11;">&quot;fc8&quot;</span><span style="color: #197d8b;">)</span>
		<span style="color: #1f3f81; font-style: bold;">message</span> <span style="color: #197d8b;">(</span><span style="color: #912f11;">&quot;Fedora 8&quot;</span><span style="color: #197d8b;">)</span>
	<span style="color: #1f3f81; font-style: bold;">endif</span> <span style="color: #197d8b;">()</span>
<span style="color: #1f3f81; font-style: bold;">elseif</span> <span style="color: #197d8b;">(</span><span style="color: #b08000;">${CMAKE_SYSTEM}</span> <span style="color: #077807; font-sytle: italic;">MATCHES</span> <span style="color: #912f11;">&quot;FreeBSD&quot;</span><span style="color: #197d8b;">)</span>
	<span style="color: #1f3f81; font-style: bold;">message</span> <span style="color: #197d8b;">(</span><span style="color: #912f11;">&quot;FreeBSD&quot;</span><span style="color: #197d8b;">)</span>
<span style="color: #1f3f81; font-style: bold;">elseif</span> <span style="color: #197d8b;">(</span><span style="color: #b08000;">${CMAKE_SYSTEM}</span> <span style="color: #077807; font-sytle: italic;">MATCHES</span> <span style="color: #912f11;">&quot;Darwin&quot;</span><span style="color: #197d8b;">)</span>
	<span style="color: #1f3f81; font-style: bold;">message</span> <span style="color: #197d8b;">(</span><span style="color: #912f11;">&quot;Mac OS X&quot;</span><span style="color: #197d8b;">)</span>
<span style="color: #1f3f81; font-style: bold;">endif</span> <span style="color: #197d8b;">()</span></pre></div></div>

<p>Полный список полезных переменных можно посмотреть в <a href="http://www.cmake.org/Wiki/CMake_Useful_Variables#System_.26_Compiler_Information" target="_blank">Kitware Public Wiki</a>.</p>
<img src="http://www.devexp.ru/?ak_action=api_record_view&id=59&type=feed" alt="" /><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/02/opredelenie-versii-sistemy-s-cmake/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/02/opredelenie-versii-sistemy-s-cmake/#comments">Нет комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>,  <a href="http://www.devexp.ru/category/razrabotka/sborka/" title="Просмотреть все записи в Сборка" rel="category tag">Сборка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/02/opredelenie-versii-sistemy-s-cmake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boost Test, юнит-тестирование и CMake</title>
		<link>http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/</link>
		<comments>http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 16:09:38 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Сборка]]></category>
		<category><![CDATA[Тестирование]]></category>
		<category><![CDATA[Boost]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[CMake]]></category>
		<category><![CDATA[CTest]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/</guid>
		<description><![CDATA[ 
Написанием модульных тестов можно не только повысить скорость разработки за счет экономии времени на отладке, но и повысить качество. Также написание тестов позволяет критично взглянуть на интерфейсы классов и функций, что выливается в создание простых и логичных интерфейсов. Но разработка с применением тестов может не принести ощутимых плодов из-за сложности написания тестов, что выльется [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.boost.org/doc/libs/1_41_0/libs/test/doc/html/index.html" target="_blank"><img title="Boost Test" alt="Boost Test" src="http://www.devexp.ru/wp-content/uploads/2010/01/boost_test.png" /></a> </p>
<p>Написанием модульных тестов можно не только повысить скорость разработки за счет экономии времени на отладке, но и повысить качество. Также написание тестов позволяет критично взглянуть на интерфейсы классов и функций, что выливается в создание простых и логичных интерфейсов. Но разработка с применением тестов может не принести ощутимых плодов из-за сложности написания тестов, что выльется в слабое покрытие кода тестами. Поэтому инструмент для тестирования должен быть максимально простым, написание тестов должно происходить с приложением минимального количества усилий. Я пользовался фреймворком для написания тестов <a href="http://unittest-cpp.sourceforge.net/" target="_blank">UnitTest++</a> – это очень хороший и удобный инструмент и если вы не используете Boost, я бы порекомендовал обратить на него пристальное внимание. Но в данной заметке речь пойдет не о нем, а о фреймворке <a href="http://www.boost.org/doc/libs/1_41_0/libs/test/doc/html/index.html" target="_blank">Boost Test</a>.</p>
<p> <p style="text-align: right"><a href="http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/">Читать дальше...</a></p><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/#comments">4 комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>,  <a href="http://www.devexp.ru/category/razrabotka/sborka/" title="Просмотреть все записи в Сборка" rel="category tag">Сборка</a>,  <a href="http://www.devexp.ru/category/razrabotka/testirovanie/" title="Просмотреть все записи в Тестирование" rel="category tag">Тестирование</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CMake и Boost</title>
		<link>http://www.devexp.ru/2010/01/cmake-i-boost/</link>
		<comments>http://www.devexp.ru/2010/01/cmake-i-boost/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 15:48:31 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Сборка]]></category>
		<category><![CDATA[Boost]]></category>
		<category><![CDATA[CMake]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/01/cmake-i-boost/</guid>
		<description><![CDATA[ 
В этой заметке я хочу рассмотреть тему сборки проектов использующих библиотеки Boost. Мы рассмотрим проект из исполняемого файла использующего Boost Thread и двух библиотек использующих Boost Unit Test Framework.
Первым делом необходимо установить значения переменных отвечающих за тип линковки библиотек (статическая или динамическая):

set (Boost_USE_STATIC_LIBS ON)

И использование многопоточности библиотеками:

set (Boost_USE_MULTITHREADED ON)

После этого можно выполнить уже знакомую [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.devexp.ru/wp-content/uploads/2010/01/cmake_boost.png" /> </p>
<p>В этой заметке я хочу рассмотреть тему сборки проектов использующих библиотеки <a href="http://www.boost.org/" target="_blank">Boost</a>. Мы рассмотрим проект из исполняемого файла использующего Boost Thread и двух библиотек использующих Boost Unit Test Framework.</p>
<p>Первым делом необходимо установить значения переменных отвечающих за тип линковки библиотек (статическая или динамическая):</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">set</span> <span style="color: #197d8b;">(</span>Boost_USE_STATIC_LIBS <span style="color: #077807; font-sytle: italic;">ON</span><span style="color: #197d8b;">)</span></pre></div></div>

<p>И использование многопоточности библиотеками:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">set</span> <span style="color: #197d8b;">(</span>Boost_USE_MULTITHREADED <span style="color: #077807; font-sytle: italic;">ON</span><span style="color: #197d8b;">)</span></pre></div></div>

<p>После этого можно выполнить уже знакомую по <a href="http://www.devexp.ru/2010/01/cmake-i-qt/" target="_blank">заметке</a> о CMake и QT команду <strong>find_package:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">find_package</span> <span style="color: #197d8b;">(</span>Boost COMPONENTS список_нужных_модулей REQUIRED<span style="color: #197d8b;">)</span></pre></div></div>

<p>Дополнительно можно указать необходимую версию Boost:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">find_package</span> <span style="color: #197d8b;">(</span>Boost 1.35.0 COMPONENTS список_нужных_модулей REQUIRED<span style="color: #197d8b;">)</span></pre></div></div>

<p>В случае если Boost корректно установлен, результатом работы команды будет создание переменных содержащих директории с заголовочными файлами Boost и пути к необходимым библиотекам:</p>

<div class="wp_syntax"><div class="code"><pre class="cmake" style="font-family:monospace;"><span style="color: #1f3f81; font-style: bold;">include_directories</span><span style="color: #197d8b;">(</span><span style="color: #b08000;">${Boost_INCLUDE_DIRS}</span><span style="color: #197d8b;">)</span>
...
<span style="color: #1f3f81; font-style: bold;">target_link_libraries</span> <span style="color: #197d8b;">(</span><span style="color: #b08000;">${PROJECT}</span> <span style="color: #b08000;">${Boost_LIBRARIES}</span><span style="color: #197d8b;">)</span></pre></div></div>

<p><p style="text-align: right"><a href="http://www.devexp.ru/2010/01/cmake-i-boost/">Читать дальше...</a></p><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/01/cmake-i-boost/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/01/cmake-i-boost/#comments">2 комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>,  <a href="http://www.devexp.ru/category/razrabotka/sborka/" title="Просмотреть все записи в Сборка" rel="category tag">Сборка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/01/cmake-i-boost/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CMake и Qt</title>
		<link>http://www.devexp.ru/2010/01/cmake-i-qt/</link>
		<comments>http://www.devexp.ru/2010/01/cmake-i-qt/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 15:36:00 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Сборка]]></category>
		<category><![CDATA[CMake]]></category>
		<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/01/cmake-i-qt/</guid>
		<description><![CDATA[ 
В заметке представлен способ сборки программ использующих библиотеку Qt. Рассмотрены вопросы локализации приложения и подключения ресурсов, например изображений.
Помимо файлов с примерами есть файл с шаблоном приложения, используя который можно быстро создать достаточно сложный проект.
Читать дальше...

Copyright &#169; 2010, Личный опыт разработки ПО. 
Все права защищены. &#124;
Постоянная ссылка &#124;
21 комментариев

Хотите узнать больше? Посмотреть все записи в [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.devexp.ru/wp-content/uploads/2010/01/cmake_qt.png"> </p>
<p>В заметке представлен способ сборки программ использующих библиотеку Qt. Рассмотрены вопросы локализации приложения и подключения ресурсов, например изображений.</p>
<p>Помимо файлов с примерами есть файл с шаблоном приложения, используя который можно быстро создать достаточно сложный проект.</p>
<p><p style="text-align: right"><a href="http://www.devexp.ru/2010/01/cmake-i-qt/">Читать дальше...</a></p><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/01/cmake-i-qt/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/01/cmake-i-qt/#comments">21 комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>,  <a href="http://www.devexp.ru/category/razrabotka/sborka/" title="Просмотреть все записи в Сборка" rel="category tag">Сборка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/01/cmake-i-qt/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Сборка проектов с CMake. Введение</title>
		<link>http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/</link>
		<comments>http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 17:52:21 +0000</pubDate>
		<dc:creator>Максим Тремпольцев</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[Сборка]]></category>
		<category><![CDATA[CMake]]></category>

		<guid isPermaLink="false">http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/</guid>
		<description><![CDATA[
Для автоматизации сборки проектов традиционно используют системы сборки, такие как make на Unix подобных системах и nmake для компилятора Microsoft. Также традиционно написание файлов для сборки проекта под эти системы является задачей нетривиальной. Конечно в пользуясь только Mictosoft Visual Studio можно даже не подозревать о существовании этих файлов, так как интегрированная среда разработки достаточно удобно [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.devexp.ru/wp-content/uploads/2010/01/cmake.png" />
<p>Для автоматизации сборки проектов традиционно используют системы сборки, такие как <strong>make</strong> на Unix подобных системах и <strong>nmake</strong> для компилятора Microsoft. Также традиционно написание файлов для сборки проекта под эти системы является задачей нетривиальной. Конечно в пользуясь только Mictosoft Visual Studio можно даже не подозревать о существовании этих файлов, так как интегрированная среда разработки достаточно удобно скрывает всю кухню, оставляя снаружи несколько диалоговых окон и кнопку <strong>Build</strong>. Но для сложных проектов использующих массу сторонних библиотек и кроссплатформенных проектов такой подход часто оказывается неприемлемым.</p>
<p>Кратко говоря make-файл представляет из себя описания последовательности действий необходимых для того чтобы достичь какой либо цели, например скомпилировать программу. На псевдокоде это может выглядеть примерно так:</p>
<h5>Что нужно сделать?</h5>
<h6></h6>
<p>Собрать программу hello_world.</p>
<h5>Как ее делать?</h5>
<p>Взять файлы hello_world.h и hello_world.cpp и запустить компилятор передав их в качестве параметров.</p>
<h5>Что делать когда компилятор закончит работать?</h5>
<p>Взять получившийся в результате работы компилятора объектный файлы hello_world.o и запустить линковщик передав ему этот файл.</p>
<p>Все.</p>
<p>Причем каждый подпроект может иметь свой файл сборки, а главный make-файл сможет пройти рекурсивно по подпроектам, выполнив его файл сборки, а потом собрать проект из этих компонентов.</p>
<p>Выглядит все просто, проблемы возникают дальше и проблем несколько:</p>
<ol>
<li>Разрешение зависимостей возникающих между частями проекта </li>
<li>Синтаксическая сложность и неоднозначность классических make-файлов </li>
<li>Привязка к конкретной утилите автоматической сборки и как следствие непереносимость на другие платформы </li>
</ol>
<p>Для решения части этих проблем или всех сразу были созданы следующие инструменты: <strong>Automake</strong> (<a title="http://sourceware.org/automake/" href="http://sourceware.org/automake/">http://sourceware.org/automake/</a>) , <strong>CMake</strong> (<a title="http://www.cmake.org/" href="http://www.cmake.org/">http://www.cmake.org/</a>), <strong>SCons</strong> (<a title="http://www.scons.org/" href="http://www.scons.org/">http://www.scons.org/</a>). Список далеко не полный.</p>
<p>Я предлагаю рассмотреть <strong>CMake</strong>, как простой для изучения, понятный, мощный и кроссплатформенный инструмент, который решает сразу все три проблемы. Подробности ниже.</p>
<p> <p style="text-align: right"><a href="http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/">Читать дальше...</a></p><hr noshade style="margin:0;height:1px" />
<small>
<p>Copyright &copy; 2010, <a href="http://www.devexp.ru">Личный опыт разработки ПО</a>. 
Все права защищены. |
<a href="http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/">Постоянная ссылка</a> |
<a href="http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/#comments">5 комментариев</a>
<br/>
Хотите узнать больше? Посмотреть все записи в категории <a href="http://www.devexp.ru/category/razrabotka/" title="Просмотреть все записи в Разработка" rel="category tag">Разработка</a>,  <a href="http://www.devexp.ru/category/razrabotka/sborka/" title="Просмотреть все записи в Сборка" rel="category tag">Сборка</a>.</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

