<?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>The WebDevil &#187; C++</title>
	<atom:link href="http://dmitry.shaposhnik.name/category/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://dmitry.shaposhnik.name</link>
	<description>Enjoy development</description>
	<lastBuildDate>Mon, 24 May 2010 01:29:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>NetBeans 6.0 released</title>
		<link>http://dmitry.shaposhnik.name/2007/12/04/netbeans-60-released/</link>
		<comments>http://dmitry.shaposhnik.name/2007/12/04/netbeans-60-released/#comments</comments>
		<pubDate>Mon, 03 Dec 2007 21:26:22 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/2007/12/04/netbeans-60-released/</guid>
		<description><![CDATA[Наконец-то вышел NetBeans 6.0 &#8211; замечательная Java IDE. Для меня она ценна изумительной поддержкой Ruby, а также наличием в плагинах средств для работы с UML, PHP, C/C++.

]]></description>
			<content:encoded><![CDATA[<p>Наконец-то вышел NetBeans 6.0 &#8211; замечательная Java IDE. Для меня она ценна изумительной поддержкой Ruby, а также наличием в плагинах средств для работы с UML, PHP, C/C++.</p>
<p><a href="http://download.netbeans.org/netbeans/6.0/final/"><img src="http://blogs.sun.com/tor/resource/110x32_dl2.gif"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/12/04/netbeans-60-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>autotools</title>
		<link>http://dmitry.shaposhnik.name/2007/11/25/autotools/</link>
		<comments>http://dmitry.shaposhnik.name/2007/11/25/autotools/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 02:32:31 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/2007/11/25/autotools/</guid>
		<description><![CDATA[Сегодня попытался воспользоваться autoconf и automake для автоматической генерации Makefile для сборки проекта.
Исходники на C++, проект довольно старый.

Итак, вот как выглядит схема работы GNU build system:

И теперь маленький туториал по шагам.
Допустим, проект лежит в директории /project. Помещаем в папку /project/src.
Теперь в /project создаем файл Makefile.am со следующей начинкой:
SUBDIRS=src
Это сообщит где искать дополнительные make-файлы.
В директории /project/src [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня попытался воспользоваться autoconf и automake для автоматической генерации Makefile для сборки проекта.<br />
Исходники на C++, проект довольно старый.<br />
<span id="more-145"></span><br />
Итак, вот как выглядит схема работы GNU build system:<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/7/76/Autoconf.png" /></p>
<p>И теперь маленький туториал по шагам.<br />
Допустим, проект лежит в директории /project. Помещаем в папку /project/src.<br />
Теперь в /project создаем файл Makefile.am со следующей начинкой:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">SUBDIRS</span>=src</div></div>
<p>Это сообщит где искать дополнительные make-файлы.<br />
В директории /project/src создаем Makefile.am следующего содержания:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">helloprgdir</span>=..<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #007800;">helloprg_PROGRAMS</span>=hello<br />
<span style="color: #007800;">hello_SOURCES</span>=hello.c</div></div>
<p>Первая строка &#8211; куда копировать бинарники при make install.<br />
Вторая &#8211; имя программы<br />
Третья &#8211; исходники, которые будут компилироваться. Также все упомянутые тут файлы будут собраны при make dist. Но об этом советую почитать подробнее в доке.</p>
<p>Ок, теперь можно запустить в корне проекта команду</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">autoscan</div></div>
<p>Она создаст нужный нам файл &#8211; configure.scan. Переименовываем его в configure.ac и правим:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">AC_INIT<span style="color: #7a0874; font-weight: bold;">&#40;</span>FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>к примеру на</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">AC_INIT<span style="color: #7a0874; font-weight: bold;">&#40;</span>HELLO WORLD, <span style="color: #000000;">0.1</span>, bugs at example.com<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>Также надо добавить директиву</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">AM_INIT_AUTOMAKE</div></div>
<p>чтобы утилиты создали Makefile.</p>
<p>Также советуют заменить AC_CONFIG_HEADER на AM_CONFIG_HEADER.</p>
<p>Теперь выполним</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">aclocal</span></div></div>
<p>Он создаст m4 скрипт для выполнения будущего configure.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">autoheader</span></div></div>
<p>создаст необходимые заголоки для будущего configure.</p>
<p>Наконец, выполним</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">automake</span> <span style="color: #660033;">-ac</span></div></div>
<p>-a добавит отсутствующие файлы, -c скопирует их вместо создания симлинки.<br />
А теперь смотрим какие файлы он не создал: NEWS, AUTHORS, ChangeLog, README. Для дальнейшей сборки надо их создать.</p>
<p>И теперь выполняем</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">autoconf</span></div></div>
<p>Если все прошло успешно &#8211; то теперь проект готов, можно делать ./configure &#038;&#038; make. А кроме того make dist соберет аккуратный пакетик-архивчик со всеми исходниками и скриптами для сборки.</p>
<p>Ссылки:<br />
<a href="http://autotoolset.sourceforge.net/">autotoolset</a><br />
<a href="http://www.gnu.org/software/autoconf/manual/html_node/The-GNU-Build-System.html#The-GNU-Build-System">The-GNU-Build-System</a><br />
<a href="http://www.developingprogrammers.com/index.php/2006/01/05/autotools-tutorial/">Tutorial</a></p>
<p>ЗЫ: я делал это впервые, потому замечаниям буду только рад.<br />
ЗЫ2: задался вопросом &#8211; а как бы не описывать руками какие файлы собирать, а использовать некий хитрый макрос для того чтоб оно съело все исходники само?</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/11/25/autotools/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
