<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<!-- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ 
  <!ENTITY date "March 2004">
  <!ENTITY app "anjuta"> -->
<!-- =============Document Header ============================= -->
<book id="index" lang="cs">
 <bookinfo>
  <title>Výuka sestavování v IDE Anjuta</title>
  <edition>v0.2</edition>

  <copyright><year>2004</year> <holder>Olivier Pinçon</holder></copyright>
  <copyright><year>2008</year> <holder>Sébastien Granjoux</holder></copyright>

<!-- translators: uncomment this:
  <copyright>
   <year>2001</year>
   <holder>ME-THE-TRANSLATOR </holder>
  </copyright>
-->
  
  <legalnotice>
   <para>Je povoleno kopírovat, šířit a/nebo upravovat tento dokument za podmínek <citetitle>GNU Free Documentation License</citetitle> ve verzi 1.1 nebo v jakékoli další verzi vydané nadací Free Software Foundation; bez neměnných oddílů, bez textů předních desek a bez textů zadních desek. Kopii licence <citetitle>GNU Free Documentation License</citetitle> můžete získat od organizace Free Software Foundations na <ulink type="http" url="http://www.fsf.org">jejich webových stránkách</ulink>, nebo když si o ni napíšete na adresu: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</para>
   <para>Mnoho názvů použitých firmami k zviditelnění produktů nebo služeb jsou ochranné známky. Na místech, kde jsou tyto názvy v dokumentaci použity a členové Dokumentačního projektu GNOME jsou si vědomi skutečnosti, že se jedná o ochrannou známku, je takovýto název psán velkými písmeny celý nebo s velkým písmenem na začátku."</para>
  </legalnotice>

  <!-- this is the version of manual, not application --> 
  <releaseinfo>Jedná se o verzi 2.0 výuky sestavování v IDE Anjuta</releaseinfo>
 </bookinfo>
 <!-- Document Body -->
 <!-- Introduction -->
<chapter id="intro">
	<title>Úvod</title>
	<para>Když přicházíte ze světa Windows a poprvé spustíte aplikaci <application>Anjuta</application>, můžete si říct: „Jé, to vypadá jak MS Visual C++, to dobře znám. Takže pochopit <application>Anjutu</application> bude pro mě malina.“ <application>Anjuta</application> opravdu vypadá jak <application>Microsoft Visual Studio</application> nebo <application>Borland's C++ Builder</application>. Jsou zde ale významné rozdíly v samotném sestavovacím systému.</para>
	<para>Jestli jste s programováním začali z příkazové řádky, nejspíše jste již slyšeli o <application>Autotools</application>. Jedná se o hlavní a pravděpodobně trochu zastrašující část vývojářského prostředí.</para>
	<para>Cílem <application>Anjuty</application> je usnadnit používání již existujících vývojářských nástrojů. Její hlavní sestavovací systém používá standardní sestavovací systém Linuxu: <application>Autotools</application>. Tato příručka je aktualizovanou verzí pokročilé příručky k IDE <application>Anjuta</application> od Oliviera Pinçona. Vysvětluje, jak sestavovací systém funguje bez <application>Anjuty</application> a jak se používá s ní. Předpokládá u vás jen základní znalosti C nebo C++ a byla napsán pro použití s verzí <application>Anjuta 2.6 (září 2008)</application>.</para>
	<para>Když najdete chybu, budete potřebovat podrobnější vysvětlení nebo budete mít nápad na vylepšení této příručky nebo <application>Anjuty</application> obecně, můžete: <itemizedlist>
			<listitem>
				<para>Vyplnit chybové hlášení do <ulink url="http://bugzilla.gnome.org/enter_bug.cgi?product=anjuta">databáze bugzilla pro projekt <application>Anjuta</application></ulink>.</para>
			</listitem>
			<listitem>
				<para>Poslat zprávu do vývojářské poštovní konference projektu <application>Anjuta</application> na adrese <email>anjuta-devel@lists.sourceforge.net</email>.</para>
			</listitem>
			<listitem>
				<para>Připojit se ke kanálu IRC projektu <application>Anjuta</application> na adrese <ulink url="irc://irc.gnome.org/anjuta">#anjuta on irc.gnome.org</ulink></para>
			</listitem>
		</itemizedlist></para>
</chapter>

 <!-- Build -->
<chapter id="build">
	<title>Sestavení projektu</title>
	<para>Tato kapitola objasňuje, jak sestavit program, počínaje úplně základním nástrojem – kompilátorem. Je důležité začít takto, abyste pochopili, jak to funguje, protože každý další nástroj přidává novou vrstvu nad ten předchozí.</para>
	<sect1 id="build-gcc"> 
		<title>Použití <application>GCC</application></title>
		<para>Zde je typický příkaz pro vygenerování spustitelného souboru ze zdrojových kódů v jazyce C pomocí <application>GCC</application>:</para>
		<screen>
<prompt>$</prompt><userinput>gcc -g -Wall -I/usr/include/libxml2/libxml -lxml2 main.c aux.c -o tut_prog</userinput></screen>
		<para>Tento příkaz říká <application>GCC</application>, aby zkompiloval zdrojové kódy main.c a aux.c a vytvořil binární soubor nazvaný „tut_prog“ (zkráceni z „tutorial program“ – „výukový program“). Jednotlivé přepínače mají následující význam:</para>
		<variablelist spacing="compact">
			<varlistentry>
			<term><parameter>-g</parameter></term>
			<listitem>
				<para>Říká <application>GCC</application>, aby do výsledného programu přidal ladicí informace.</para>
			</listitem>
			</varlistentry>			
			<varlistentry>
			<term><parameter>-Wall</parameter></term>
			<listitem>
				<para>„Warning all“, což znamená vypisovat všechna varování. Tento přepínač používá jen kompilátor jazyka C.</para>
			</listitem>
			</varlistentry>			
			<varlistentry>
			<term><parameter>-Idir <replaceable>složka</replaceable></parameter></term>
			<listitem>
				<para>Zajistí, že se hlavičkové soubory (jako je #include &lt;myheader.h&gt;) budou hledat ve složce <replaceable>složka</replaceable>. Tento přepínač používá pouze preprocesor jazyka C.</para>
			</listitem>
			</varlistentry>			
			<varlistentry>
			<term><parameter>-llib <replaceable>knihovna</replaceable></parameter></term>
			<listitem>
				<para>Odkaz na <replaceable>knihovnu</replaceable>, zde konkrétně <application>libxml2</application>, pro potřeby linkeru.</para>
			</listitem>
			</varlistentry>			
		</variablelist>			
		<para>Ve skutečnosti kompilaci neprovádí přímo <application>GCC</application>. Jen převezme parametry zadané uživatelem a zavolá jiné programy a předá jim potřebné parametry, případně včetně některých výchozích. Takto se postupně provedou čtyři fáze kompilace.</para>			
		<figure>
			<title>Fáze kompilace pomocí <application>GCC</application></title>
			<mediaobject>
				<imageobject>
					<imagedata fileref="figures/compilation-stages.png" format="PNG"/>
				</imageobject>
			</mediaobject>
		</figure>
		<sect2 id="build-gcc-cpp"> 
			<title>Preprocesor</title>
			<para>Každý soubor se zdrojovým kódem v jazyce C projde přes preprocesor nazvaný <application>cpp</application>. V této fázy se rozvinou všechny vložené soubory a makra – zdrojový kód se předpřipraví (anglicky preproces). Výsledný soubor s příponou <filename>.i</filename> se generuje jen výjimečně, ale může být zajímavé se podívat, jak složitě a rozsáhle se makra rozvíjejí. Nechast si soubor vytvořit se dá zavoláním <application>cpp</application> přímo nebo zavoláním <userinput>-E</userinput> s přepínačem <application>GCC</application>. Druhé zmíněné je lepší, protože preprocesoru předá navíc některé výchozí hodnoty.</para>
		</sect2>		
		<sect2 id="build-gcc-cc"> 
			<title>Kompilátor</title>
			<para>V této fázi jsou jednotlivé soubory zkompilovány do assemblerového kódu. Použitý kompilátor odvisí od použitého jazyka ve zdrojovém kódu, zde je to C. Jedná se o složitý program, protože neexistuje přepis jedna k jedné mezi instrukcí C a instrukcí assembleru. Například, požadavek na co nejrychlejší a na co nejmenší program vygenerují různou posloupnost assemblerových instrukcí. Assembler je jazyk závislý na použitém počítači, nejčastěji to asi bude x86. Výstupem je pro člověka čitelný zdrojový kód v assembleru v souboru s příponou <filename>.s</filename>. Stejně jako u výstupu z preprocesoru, ani tyto soubory se normálně nezapisují na disk. Jestli se ale chcete na soubory podívat, můžete kompilaci v této fázi zastavit spuštěním <application>GCC</application> s přepínačem <userinput>-S</userinput>.</para>
		</sect2>		
		<sect2 id="build-gcc-as"> 
			<title>Assembler</title>
			<para>V této fázi jsou jednotlivé soubory zpracovány assemblerem: kód je převeden to objektových souborů s příponou <filename>.o</filename>. To je podstatně jednodušší než kompilace, protože každá instrukce odpovídá jedna k jedné unikátnímu kódu. Objektový soubor obsahuje doplňující informace pro ladění a linkovací program. Objektový soubor má binární formát, na počítačích s novými verzemi Linuxu nazývaný ELF. Abyste si jej mohli prohlédnou, potřebujete speciální program, jako je třeba <application>objdump</application>. Můžete psát programy v assembleru i přímo ručně do souborů s příponou <filename>.s</filename> a pak je převádět programem  <application>as</application>, stejně jako to dělá <application>GCC</application>. Výsledné objektové soubory se běžné zapisují na disk, protože závisí jen na příslušném souboru se zdrojovým kódem C (včetně všech vložených souborů). Když změníte jeden zdrojový soubor, stačí nově vygenerovat jen příslušné objektové soubory. Skončit v této fázi, bez následného slinkování, můžete použitím přepínače <userinput>-c</userinput> pro <application>GCC</application>.</para>
		</sect2>		
		<sect2 id="build-gcc-ld"> 
			<title>Linker</title>
			<para>Tato fáze slouží ke zkombinování všech objektových souborů a knihoven do jednoho spustitelného souboru. Výsledkem je binární soubor ve formátu velmi podobném objektovým souborům, v Linuxu je to dokonce tentýž formát.</para>
		</sect2>		
	</sect1>
	<sect1 id="build-make"> 
		<title>Použití <application>make</application></title>
		<para>V situaci, kdy se program skládá z velkého množství zdrojových souborů, je mnohem rychlejší objektové soubory zachovávat a znovu kompilovat jen ty zdrojové soubory, které je potřeba. To se dá automatizovat pomocí programu <application>make</application>. Ten spouští program napsaný ve formátu makefile, normálně pojmenovaný <filename>Makefile</filename>. Příklad pro předchozí ukázkový program by mohl vypadat takto:</para>
		<example>
			<title>Jednoduchý soubor Makefile</title>
			<programlisting>
CC=gcc 	# kompilátor je gcc
CFLAGS=-g -Wall -I/usr/include/libxml2
LIBS=-lxml2					
				
tut_prog: main.o aux.o   # co je potřeba pro získání „tut_prog“…
	$(CC) $(LIBS) main.o aux.o -o tut_prog # … a jak jej získat z jednotlivých dílků.
					
main.o: main.c
	$(CC) -c $(CFLAGS) main.c
					
aux.o: aux.c
	$(CC) -c $(CFLAGS) aux.c</programlisting>
		</example>
		<para>Soubory Makefile jsou jistým druhem skriptových programů, ale místo zapsané posloupnosti toho, co se má udělat, aby se dospělo k výsledku, definují určitá pravidla. Program <application>make</application> pak tato pravidla používá v různém pořadí, aby dosáhl žádaného výsledku.</para>
		<sect2 id="build-make-vars"> 
			<title>Proměnné</title>
			<para>Stejně jako v jiných programovacích jazycích, můžete i souborech makefile definovat proměnné. Všechny proměnné obsahují řetězec nebo seznam řetězců oddělených bílými znaky. Proměnná je definovaná pomocí následující syntaxe: <replaceable>nazev</replaceable>=<replaceable>hodnota</replaceable>. Její hodnotu pak můžete získat zápisem $(<replaceable>nazev</replaceable>) nebo ${<replaceable>nazev</replaceable>}. V předchozím příkladu jsou definované tři proměnné – CC, CFLAGS a LIBS.</para>
			<para>Proměnné je možné předefinovat, když se volá <application>make</application>, v příkazové řádce nebo pomocí hodnot z proměnných prostředí. Navíc <application>make</application> obsahuje některá výchozí pravidla používající předdefinované proměnné. Zde je seznam nejběžnějších z nich: <variablelist>
				<varlistentry>
				<term><envar>CC</envar></term>
				<listitem><para>Program pro kompilaci z jazyka C; výchozí je „cc“</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>CXX</envar></term>
				<listitem><para>Program pro kompilaci z jazyka C++; výchozí je „g++“</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>CPP</envar></term>
				<listitem><para>Program použitý jako preprocesor jazyka C; výchozí je „$(CC) -E“</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>FC</envar></term>
				<listitem><para>Program pro kompilaci z jazyka Fortran; výchozí je „f77“</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>RM</envar></term>
				<listitem><para>Program pro odtraňování souborů; výchozí je „rm -f“</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>CFLAGS</envar></term>
				<listitem><para>Doplňující přepínače pro kompilátor jazyka C</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>CXXFLAGS</envar></term>
				<listitem><para>Doplňující přepínače pro kompilátor jazyka C++</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>CPPFLAGS</envar></term>
				<listitem><para>Doplňující přepínače pro kompilátor jazyka C++</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>CXXFLAGS</envar></term>
				<listitem><para>Doplňující přepínače pro preprocesor jazyka C</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>FFLAGS</envar></term>
				<listitem><para>Doplňující přepínače pro kompilátor jazyka Fortran</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><envar>LDFLAGS</envar></term>
				<listitem><para>Doplňující přepínače pro linker</para></listitem>
				</varlistentry>
			</variablelist></para>
		</sect2>
		<sect2 id="build-make-rules"> 
			<title>Pravidla</title>
			<para>Základní syntax pro pravidla make je:</para>
			<programlisting>
<replaceable>cíl</replaceable>: <replaceable>předpoklady</replaceable>
	<replaceable>příkazy</replaceable>
	<replaceable>…</replaceable></programlisting>
			<para>Údaje <replaceable>cíl</replaceable> a <replaceable>předpoklady</replaceable> jsou normálně soubory, ale mohou to být i akce. Pravidlo je interpretováno, když je potřeba vytvořit cíl, případně jej aktualizovat, pokud je starší než předpoklad. Pro interpretaci je potřeba mít splněné všechny předpoklady a následně jsou pak provedeny všechny příkazy.</para>
			<para><application>make</application> začne s prvním cílem v souboru Makefile, nebo s tím, který je předaný z příkazové řádky, a hledá pro něj pravidlo. Pokud nemá pravidlo žádné předpoklady, provedou se související příkazy a tím vše skončí. Pokud ale existují, před spuštěním příkazů hledá <application>make</application> pravidla, která mají jednotlivé předpoklady jako cíle a pro ně celý postup opakuje.</para>
			<para>Když v příkladu výše spustíte <userinput>make</userinput> nebo <userinput>make tut_prog</userinput>, provede <application>make</application> následující: <programlisting>
Hledá pravidlo s cílem tut_prog
Najde jej s předpoklady mani.o aux.o
	Hledá pravidlo s cílem main.o
	Najde jej s předpokladem main.c
		Hledá pravidlo s cílem main.c
		Nenajde jej (main.c je zdrojový soubor)
	Pokud main.o neexistuje nebo je starší než main.c
		Zkompiluje main.c, bez linkování (-c switch)
	Hledá pravidlo s cílem aux.o
	Najde jej s předpokladem aux.c
		Hledá pravidlo s cílem aux.c
		Nenajde jej (aux.c je zdrojový soubor)
	Pokud aux.o neexistuje nebo je starší než aux.c
		Zkompiluje aux.c, bez linkování (-c switch)
Pokud je tut_prog starší než main.o nebo aux.o
	Slinkuje main.o, aux.o a libxml2</programlisting></para>
			<para>Podobně, jako je tomu u proměnných, i u cílů je definováno několik obedně používaných názvů:</para>
			<variablelist>
				<varlistentry>
				<term><parameter>all</parameter></term>
				<listitem><para>Provést vše</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><parameter>check</parameter></term>
				<listitem><para>Po sestavené programu provést automatizované testy</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><parameter>clean</parameter></term>
				<listitem><para>Odstranit všechny soubory, které <application>make</application> vytvořil</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><parameter>distclean</parameter></term>
				<listitem><para>Odstranit více souborů, než clean; může odstranit i Makefile samotný</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><parameter>dist</parameter></term>
				<listitem><para>Vytvořit distribuční balíček, například komprimovaný tar</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><parameter>install</parameter></term>
				<listitem><para>Nainstalovat cíl vytvořený pomocí <application>make</application>; kvůli instalaci do systémových složek je potřeba spustit pod uživatelem root</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><parameter>uninstall</parameter></term>
				<listitem><para>Odstranit soubory, které <application>make</application> nainstaloval</para></listitem>
				</varlistentry>
			</variablelist>
			<note>
				<para>Program zkompilovaný ze zdrojových kódů se standardně nainstaluje do <filename class="directory"> /usr/local</filename>. Když chcete to takovéto systémové složky instalovat (nebo z ní naopak něco odinstalovat), musíte být pře spuštěním <userinput>make install</userinput> přihlášení jako uživatel root, nejlépe pomocí <userinput>su</userinput> nebo <userinput>sudo</userinput>.</para>
			</note>
		</sect2>
	</sect1>
	<sect1 id="build-autotools"> 
		<title>Použití <application>Autotools</application></title>
		<para>Pokud chcete sestavit program na jiném systému, mohlo by být použití samotného <application>make</application> poněkud obtížné. Mohl by být potřeba jiný kompilátor jazyka C. Některé funkce C by mohly scházet, mít jiný název, být deklarované s jinou hlavičkou apod. Dalo by se to sice řešit povolováním různých částí kód pomocí direktiv #if, #ifdef a podobných ve zdrojovém kódu, ale uživatel by se musel o vše postarat sám. A takové úpravy nejsou triviální, protože existuje spousta systémů ve spoustě variací.</para>
		<para>Svobodný software se často šíří v podobě zdrojových kódů. Je podstatné, aby jej bylo možné zkompilovat na různých systémech bez technických znalostí. <application>Autotools</application> jsou navržené k tomu, aby to řešily, a nejspíše jste se již setkali s magickou kombinací <userinput>„./configure; make; make install“</userinput>. Možná jste si všimli, že v sestavovacím procesu figuruje spousta souborů. Celkově se zdá všechno poněkud komplikované. Takže, co se vlastně děje, když kompilujete software?</para>
		<sect2 id="build-autotools-inputs"> 
			<title>Vstupní soubory</title>
			<para>Projekt <application>Autotools</application> přichází přinejmenším s konfiguračním skriptem nazvaným <filename>configure</filename> a se šablonou pro Makefile nazvanou <filename>Makefile.in</filename>. Normálně bývá v každé složce projektu jedna šablona. Mimo to bývá v projektu ještě několik dalších souborů používaných <application>Autotools</application>, ale ty nejsou vysloveně nutné, nebo se generují automaticky.</para>
			<tip>
				<para>Když se do těchto souborů podíváte, zjistíte, že jsou trochu komplikovanější. Ale nebojte se, jsou generované automaticky pomocí <application>Autotools</application> ze šablon, které jsou pro napsání mnohem jednoduší, jak je vysvětleno v <xref linkend="create-autotools"/>. V tuto chvíli se jimi nebudeme zabývat a budeme předpokládat, že ve chvíli, kdy stáhneme zdrojový balíček, již existují.</para>
			</tip>
		</sect2>
		<sect2 id="build-autotools-configure"> 
			<title>Configure</title>
			<para>Ve skutečnosti na sestavení balíčku založeného na autotools nepotřebujete <application>Autotools</application>, protože <application>configure</application> je shellový skript běžící běžící na nejzákladnějším shellu: <filename>sh</filename>. Zkoumá váš systém pomocí kontroly jednotlivých vlastností a podle šablony zapisuje Makefile.</para>
			<important>
				<para>Abyste mohli sestavit projekt používající knihovnu, potřebujete o knihovně více informací, tj. další soubory. Pro knihovny, které se používají v programech napsaných v C, potřebujete příslušné hlavičkové soubory. Ty musí být nainstalované v systému a typicky je najdete v tzv. vývojářských balíčcích. Například pro knihovnu <application>libxml2</application> existují dva balíčky:</para>
				<itemizedlist>
					<listitem>
						<para><filename>libxml2</filename> nutný ke spuštění programu, který jej používá, a instalovaný automaticky jako závislost takového programu.</para>
					</listitem>
					<listitem>
						<para><filename>libxml2-devel</filename> nutný k sestavení programu, který jej používá. Pokud jej nemáte nainstalovaný, zobrazí <application>configure</application> chybové hlášení.</para>
					</listitem>
				</itemizedlist>
			</important>
			<figure>
				<title>Zpracování pomocí configure</title>
				<mediaobject>
					<imageobject>
						<imagedata fileref="figures/configure-process.png" format="PNG"/>
					</imageobject>
				</mediaobject>
			</figure>
			<para><application>configure</application> vytvoří všechny soubory ve složce, ze které je zavolán. Tato složka je pak <emphasis>složkou sestavení</emphasis>. Když jej spustíte ze složky se zdrojovými soubory, pomocí <userinput>./configure</userinput>, bude složka sestavení tamtéž.</para>
			<para><application>configure</application> přijímá na příkazové řádce několik přepínačů. Používají se k instalaci souborů do různých složek, k zakázání některých částí projektu, aby měl menší výslednou velikost a nebo se vynechala nechtěná knihovna, nebo k vynucení hodnot pro některé proměnné <application>make</application> (viz <xref linkend="build-make-vars"/>). Seznam přepínačů získáte spuštěním <userinput>configure --help</userinput>. Zde je seznam nejběžnějších z nich:</para>
			<variablelist>
				<varlistentry>
				<term><parameter>--help</parameter></term>
				<listitem><para>Seznam dostupných voleb</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><parameter>--host <replaceable>hostitel</replaceable></parameter></term>
				<listitem><para>Zkompilovat pro spuštění na jiném systému (tzv. křížová kompilace)</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><parameter>--prefix <replaceable>složka</replaceable></parameter></term>
				<listitem><para>Určí kořenovou složku pro instalaci projektu; výchozí je /usr/local</para></listitem>
				</varlistentry>
			</variablelist>
			<note>
				<para><application>configure</application> vytváří pár dodatečných souborů, které nejsou až tak důležité. <filename>config.log</filename> je záznam, který se může hodit k dohledání podrobností, když je něco špatně. <filename>config.status</filename> je další shellový skript, pomocí kterého se dá obnovit aktuální konfigurace. <filename>config.h</filename> je hlavičkový soubor generovaný podobně jako <filename>Makefile</filename> ze šablony, konkrétně z <filename>config.h.in</filename>, pokud existuje.</para>
			</note>
		</sect2>
		<sect2 id="build-autotools-make"> 
			<title><application>make</application></title>
			<para>Soubory Makefile vygenerované příkazem <application>configure</application> jsou sice trochu komplikovanější, ale pořád to jsou standardní soubory ve formátu makefile. Definují všechny standardní cíle požadované standardem GNU.</para>
			<itemizedlist>
				<listitem>
				<para><userinput>make</userinput> nebo <userinput>make all</userinput> sestaví program.</para>
				</listitem>				
				<listitem>
				<para><userinput>make install</userinput> nainstaluje program.</para>
				</listitem>				
				<listitem>
				<para><userinput>make distclean</userinput> odstraní všechny soubory vygenerované příkazem <application>configure</application>, takže dostanete projekt do stavu, jako byl před rozbalení distribučního balíčku.</para>
				</listitem>				
			</itemizedlist>
		</sect2>
	</sect1>	
	<sect1 id="build-anjuta"> 
		<title>Použití IDE <application>Anjuta</application></title>
		<para>Nyní se podíváme na uživatelské rozhraní <application>Anjuty</application>, ve kterém můžete spouštět všechny tyto příkazy bez použití příkazové řádky.</para>
		<sect2 id="build-anjuta-configure"> 
			<title>Configure</title>
			<para>Protože <application>Anjuta</application> používá <application>Autotools</application>, je první krok podobný – potřebujete spustit skript configure. Vyberte <menuchoice><guisubmenu>Sestavit</guisubmenu><guimenuitem>Konfigurovat projekt…</guimenuitem></menuchoice> a objeví se následující dialogové okno:</para>
			<figure>
				<title>Dialogové okno konfigurace</title>
				<screenshot>
					<mediaobject>
					<imageobject>
						<imagedata fileref="figures/configure-dialog.png" format="PNG"/>
					</imageobject>
					</mediaobject>
				</screenshot>
			</figure>
			<para>Zaškrtávací políčko <guilabel>Přegenerovat projekt</guilabel> v tuto chvíli popisovat nebudeme, protože to patří k tématu vytváření projektu (viz <xref linkend="create-autotools-generate"/>).</para>
			<para>Pole <guilabel>Konfigurace</guilabel> slouží pro uživatelský název, podle kterého uživatel danou konfiguraci rozpozná a může se na ni později přepnout. V <application>Anjutě</application> každá konfigurace odpovídá jedné složce sestavení a sadě konfiguračních voleb. <application>Anjuta</application> má připravených několik výchozích konfiguraci, ze kterých si zde můžete zvolit.</para>
			<note>
				<para>Pro ladění se doporučuje použít konfiguraci Ladění. Zkompiluje váš program s vypnutými veškerými optimalizacemi. Když jsou optimalizace zapnuté, některé proměnné a funkce jsou odstraněny a nemůžete je tak vidět v ladicím programu. Navíc se mění pořadí řádků ve zdrojovém kódu, takže byste pak při krokování posouvali i zpět.</para>
			</note>
			<para>Pole <guilabel>Složka sestavení</guilabel> slouží k výběru složky používané k sestavení projektu. Musí být pro každou konfiguraci jiná.</para>
			<important>
				<para>Když sestavujete projekt ve zdrojové složce (tj. když ponecháte pole <guilabel>Složka sestavení</guilabel> prázdné), nemůžete vytvořit novou konfiguraci. Jde o omezení <application>Autotools</application>. Musíte nejprve použít <menuchoice><guisubmenu>Sestavit</guisubmenu> <guimenuitem>Odstranit konfiguraci</guimenuitem></menuchoice>, čímž se ve zdrojové složce spustí <userinput>make distclean</userinput>.</para>
			</important>
			<para>Pole <guilabel>Volby příkazu configure</guilabel> umožňuje předat konfiguračnímu skriptu další přepínače.</para>
			<para>Kliknutím na <guibutton>Spustit</guibutton> se spustí konfigurační skript. Všechny jeho výstupy se objeví v zobrazení zpráv přímo v aplikaci <application>Anjuta</application>. V případě, že skript projde bez chyb, zpřístupní se všechny další položky v nabídce <guisubmenu>Sestavit</guisubmenu>.</para>
		</sect2>
		<sect2 id="build-anjuta-menu"> 
			<title>Položky nabídky</title>
			<para>Operace sestavení v <application>Ajutě</application> spoléhá pouze na <application>make</application>, stejné jako v <application>Autotools</application>. Funguje to i u projektů, které nejsou založené na <application>Autotools</application>. Příkaz pro kompilaci pak pracuje jen se zdrojovými soubory v jazyce C, protože <application>make</application> má vestavěná pravidla pro jejich kompilaci. Zde je uvedeno, která položka nabídky aplikace <application>Anjuta</application> odpovídá kterému příkazu <application>make</application>.</para>
			<variablelist>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Zkompilovat</guimenu></menuchoice></term>
				<listitem><para>make <replaceable>aktuální_soubor</replaceable></para></listitem>
				</varlistentry>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Sestavit</guimenu></menuchoice></term>
				<listitem><para>cd <userinput>složka_aktuálního_souboru</userinput>; make</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Sestavit projekt</guimenu></menuchoice></term>
				<listitem><para>cd <userinput>složka_projektu</userinput>; make</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Sestavit balíček TAR</guimenu></menuchoice></term>
				<listitem><para>cd <userinput>složka_projektu</userinput>; make dist</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Nainstalovat</guimenu></menuchoice></term>
				<listitem><para>cd <userinput>složka_aktuálního_souboru</userinput>; make install</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Nainstalovat projekt</guimenu></menuchoice></term>
				<listitem><para>cd <userinput>složka_projektu</userinput>; make install</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Vyčistit</guimenu></menuchoice></term>
				<listitem><para>cd <userinput>složka_aktuálního_souboru</userinput>; make clean</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Vyčistit projekt</guimenu></menuchoice></term>
				<listitem><para>cd <userinput>složka_projektu</userinput>; make clean</para></listitem>
				</varlistentry>
				<varlistentry>
				<term><menuchoice><guisubmenu>Sestavit</guisubmenu><guimenu>Odstranit konfiguraci</guimenu></menuchoice></term>
				<listitem><para>cd <userinput>složka_projektu</userinput>; make distclean</para></listitem>
				</varlistentry>
			</variablelist>
			<para>Poslední položka nabídky <menuchoice><guisubmenu>Sestavit</guisubmenu> <guimenuitem>Vybrat konfiguraci</guimenuitem></menuchoice>, které nebyla výše popsána, umožňuje přepnout mezi různými konfiguracemi a také mezi různými složkami sestavení.</para>
		</sect2>
		<sect2 id="build-anjuta-options"> 
			<title>Volby</title>
			<para>Pár běžných voleb sestavení najdete na stránce s předvolbami, ke které se dostanete pomocí <menuchoice><guisubmenu>Upravit</guisubmenu> <guimenuitem>Předvolby</guimenuitem> <guimenuitem>Autotools pro sestavení</guimenuitem></menuchoice>.</para>
			<figure>
				<title>Předvolby sestavení</title>
				<screenshot>
					<mediaobject>
					<imageobject>
						<imagedata fileref="figures/build_preferences.png" format="PNG"/>
					</imageobject>
					</mediaobject>
				</screenshot>
			</figure>
		</sect2>
	</sect1>	
	
</chapter>


 <!-- Create -->
<chapter id="create">
	<title>Vytvoření projektu</title>
	<para>Tato kapitola vysvětluje, jak vytvořit nový projekt. Obdobně jako v předchozí kapitole, začneme s <application>Autotools</application> a teprve pak se podíváme na <application>Anjutu</application>.</para>
	<sect1 id="create-autotools"> 
		<title>Použití <application>Autotools</application></title>
		<para>V první kapitole jsme ve skutečnosti nepoužili nástroj <application>Autotools</application>. Při kompilaci ze zdrojových kódů není nutný. Ale všechny soubory v sestavovacím procesu se nepíšou ručně. Generují se ze šablon pomocí <application>Autotools</application>.</para>
		<para><application>Autotools</application> se ve skutečnosti skládají z několika nástrojů: <filename>aclocal</filename>, <filename>autoconf</filename>, <filename>automake</filename> a z dalších, které zde neuvidíme a které patří do dvou balíčků: <application>Automake</application> a <application>Autoconf</application>.</para>
		<itemizedlist>
			<listitem>
			<para><application>Autoconf</application> se používá ke generování konfiguračního skriptu ze šablony nazvané <filename>configure.ac</filename>. Konfigurační skript zkontroluje všechny vlastnosti hostitelského systému a vygeneruje soubor <filename>Makefile</filename> ze šablony <filename>Makefile.in</filename>.</para>
			</listitem>
			<listitem>
			<para><application>Automake</application> se používá ke generování úplných šablon Makefile.in, které splňují standardy GNU, z velmi jednoduchých šablon Makefile.am.</para>
			</listitem>
		</itemizedlist>
		<figure>
			<title>Zpracování pomocí <application>Autotools</application></title>
			<mediaobject>
				<imageobject>
					<imagedata fileref="figures/autotools-process.png" format="PNG"/>
				</imageobject>
			</mediaobject>
		</figure>
		<para>Nyní se pojďme podívat na minimalistický příklad, abychom pochopili vztahy mezi jednotlivými soubory.</para>
		<sect2 id="create-autotools-source"> 
			<title>Psaní zdrojových kódů</title>
			<orderedlist>
			<listitem>	
				<para>Vytvořte prázdnou složku s názvem <filename>tut_prog</filename> a přepněte se do ní.</para>
			</listitem>
			<listitem>
				<para>V této nové složce vytvořte nový soubor s názvem <filename>main.c</filename>, který bude obsahovat:</para>
			</listitem>
			</orderedlist>	
			<example>
				<title>main.c:</title>
				<programlisting role="C">
#include &lt;stdio.h&gt; 
	
int main()
{
	printf("Hello world!\n");
	return 0;
}</programlisting>
			</example>
		</sect2>
		<sect2 id="create-autotools-autoconf"> 
			<title>Spuštění <application>Autoconf</application></title>
			<orderedlist continuation="continues">
			<listitem>
				<para>Zapište následující do souboru nazvaného <filename>configure.ac</filename>:</para>
			</listitem>
			</orderedlist>	
			<example>
				<title>minimální configure.ac:</title>
				<programlisting>
AC_INIT([Tutorial Program], 1.0)
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CONFIG_FILES(Makefile)
AC_OUTPUT</programlisting>
			</example>
			<note>
				<para>Šablona konfiguračního skriptu by se mohla jmenovat <filename>configure.in</filename>. Tento název se skutečně používal ve starší verzi <application>Autoconf</application> (před rokem 2001). Nicméně doporučujeme použít <filename>configure.ac</filename>, protože přípona <filename>.in</filename> je již používaná soubory zpracovávanými pomocí <application>configure</application> a generovanými pomocí <application>Automake</application> (<filename>Makefile.in</filename>) a pomocí <application>autoheader</application> (<filename>config.h.in</filename>).</para>
			</note>
			<para>AC_INIT, AM_INIT_AUTOMAKE, atd. jsou makra <application>M4</application>. <application>M4</application> je software pro rozvíjení maker používaný <application>Autotools</application>. V zásadě o něm ani nepotřebujeme vědět. Když <application>Autoconf</application> zpracovává tento configure.in, makra se rozvíjí a nakonec dostaneme čistý dlouhý skript configure.</para>
			<variablelist>
				<varlistentry>
				<term>AC_INIT</term>
				<listitem>
				<para>Jedná se o povinné první makro. Musíte mu zadat název projektu a jeho verzi.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>AM_INIT_AUTOMAKE</term>
				<listitem>
				<para>Inicializuje prostředí proměnných pro <application>Automake</application>. Je zapotřebí ve všech projektech používajících <application>Automake</application>.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>AC_PROG_CC</term>
				<listitem>
				<para>Určuje, který kompilátor jazyka C se má použít.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>AC_CONFIG_FILES</term>
				<listitem>
				<para>Vytvoří jednotlivé soubory zkopírováním příslušných šablonových souborů (s příponou .in) a nahrazením hodnot výstupních proměnných.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>AC_OUTPUT</term>
				<listitem>
				<para>Označuje konec šablony pro skript configure.</para>
				</listitem>
				</varlistentry>
			</variablelist>
			<note>
				<para>Používání některých maker se změnilo mezi jednotlivými verzemi <application>Autoconf</application>:</para>
				<itemizedlist>
					<listitem>
						<para>Název balíčku býval definován jako argument AM_INIT_AUTOMAKE namísto AC_INIT.</para>
					</listitem>
					<listitem>
						<para>AC_OUTPUT přebíralo seznam generovaných souborů namísto použití přídavného makra AC_CONFIG_FILES.</para>
					</listitem>
				</itemizedlist>
			</note>
			<para><application>Autoconf</application> zná jen svá vlastní makra, ale čte i další v souboru nazvaném <filename>aclocal.m4</filename>. Tato makra se používají k rozšíření funkčnosti <application>Autoconf</application>. Patří k nim makra z <application>Automake</application> (začínající AM_) a další makra od třetích stran. Například, když vyvíjíte knihovnu foo, můžete chtít napsat makro AC_CHECK_FOR_FOO, aby vývojáři, kteří budou knihovnu používat, mohli pomocí <application>Autoconf</application> kontrolovat její přítomnost v systému.</para>
			<para><application>aclocal</application> prochází <filename>configure.ac</filename> a vytváří soubor <filename>aclocal.m4</filename>, který obsahuje makra použitá v <filename>configure.ac</filename>. <application>aclocal</application> je součástí balíčku <application>Automake</application> a standardně hledá v makrech <application>Automake</application> a v nějaké systémové cestě, typicky <filename>/usr/share/aclocal</filename>.</para>
			<orderedlist continuation="continues">
			<listitem>	
				<para>Spusťte <userinput>aclocal</userinput>. Vytvoří se tím v aktuální složce nový soubor s názvem <filename>aclocal.m4</filename>.</para>
			</listitem>
			<listitem>	
				<para>Spusťte <userinput>autoconf</userinput>. Vytvoří se tím nový konfigurační skript <filename>configure</filename>.</para>
			</listitem>
			</orderedlist> 
			<tip>
				<para>Ve skutečnosti se vám vytvoří ještě další složka s názvem <filename>autom4te.cache</filename>. Ta je pro interní účely <application>Autoconf</application> a nemusíte se jí zabývat.</para>
			</tip>
		</sect2>
		<sect2 id="create-autotools-automake"> 
			<title>Spuštění <application>Automake</application></title>
			<orderedlist continuation="continues">
			<listitem>	
				<para>Do souboru s názvem <filename>Makefile.am</filename> zapište následující:</para>
			</listitem>
			</orderedlist>	
			<example>
				<title>minimální Makefile.am:</title>
				<programlisting>
bin_PROGRAMS = tut_prog			
tut_prog_SOURCES = main.c</programlisting>
			</example>
			<para>V Makefile.am jsou nejzákladnější data potřebná k sestavení projektu: cíl programu, nazvaný tut_prog, bude umístěn do složky $prefix/bin/ a k jeho sestavení potřebujeme main.c. Všimněte si, že není řečeno, <emphasis>jak</emphasis> bude sestaven. <application>Automake</application> si to zjistí. V tomto předchůdci Makefile není zmíněn ani kompilátor.</para>
			<para>Makefile.am bude zpracován pomocí <application>Automake</application> a výsledkem bude Makefile.in. Ten už se hodně podobá skutečnému souboru makefile, ale obsahuje názvy proměnných, které budou při spuštění skriptu configure nahrazené, a výsledkem se stane skutečný makefile (nazvaný Makefile). Skript <filename>configure</filename> kupříkladu zapíše do výsledného souboru Makefile, který kompilátor se má použít (což je ten, který nalezlo makro AC_PROG_CC).</para>
			<orderedlist continuation="continues">
			<listitem>	
				<para>Spusťte příkaz <userinput>automake --add-missing --foreign</userinput>. Vytvoří nový soubor nazvaný, podle očekávání, <filename>Makefile.in</filename>. Navíc, díky přepínači <parameter>--add-missing</parameter> získáte několik odkazů na na skripty nutné pro sestavení projektu: <filename>depcomp</filename>, <filename>install.sh</filename> a <filename>missing</filename>. Druhý přepínač <parameter>--foreign</parameter> říká <application>Automake</application>, že se nechcete držet standardů GNU a nepotřebujete povinné dokumentační soubory: <filename>INSTALL</filename>, <filename>NEWS</filename>, <filename>README</filename>, <filename>AUTHORS</filename>, <filename>ChangeLog</filename> a <filename>COPYING</filename>. Zde jsme jej použili, abychom udrželi počet vytvořených souborů na minimu, ale jinak je dobré tyto soubory poskytovat a začít můžete klidně s prázdnými.</para>
			</listitem>
			</orderedlist>	
		</sect2>
		<sect2 id="create-autotools-build"> 
			<title>Sestavení projektu</title>
			<orderedlist continuation="continues">
			<listitem>	
				<para>Nyní spusťte nový konfigurační skript: <userinput>./configure</userinput>. Objeví se následující výstup a vytvoří se <filename>Makefile</filename> pro váš program.</para>
			<screen>
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands</screen>
			</listitem>
			<listitem>
				<para>Nyní spusťte <userinput>make</userinput>, aby se váš program sestavil. Objeví se následující výstup a nový spustitelný soubor tut_prog.</para>
			<screen>
gcc -DPACKAGE_NAME=\"Tutorial\ Program\" -DPACKAGE_TARNAME=\"tutorial-program\"   \
        -DPACKAGE_VERSION=\"1.0\" -DPACKAGE_STRING=\"Tutorial\ Program\ 1.0\"     \
        -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"tutorial-program\" -DVERSION=\"1.0\" \
        -I.     -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
main.c: In function ‘main’:
main.c:5: warning: return type of ‘main’ is not ‘int’
mv -f .deps/main.Tpo .deps/main.Po
gcc  -g -O2   -o tut_prog main.o</screen>
			</listitem>
			<listitem>
				<para>Nyní, za předpokladu, že máte právo zápisu do <filename>/usr/local/bin</filename>, můžete spustit <userinput>make install</userinput>, aby se program nainstaloval. Pokud jej nemáte, musíte se nejprve přihlásit jako uživatel root nebo použít <application>sudo</application> a spustit <userinput>sudo make install</userinput>. Mělo by se objevit:</para>
			<screen>
make[1]: Vstupuje se do složky „/home/seb/Projects/Tutorial“
test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
  /usr/bin/install -c 'tut_prog' '/usr/local/bin/tut_prog'
make[1]: Pro „install-data-am“ nebude nic uděláno.
make[1]: Opouští se složka „/home/seb/Projects/Tutorial“</screen>
			<para>Jestliže je <filename>/user/local/bin</filename> součástí prohledávaných cest, můžete svůj program potom spustit odkudkoliv.</para>
			</listitem>
			</orderedlist>
		</sect2>
		<sect2 id="create-autotools-clean"> 
			<title>Promazání projektu</title>
			<orderedlist continuation="continues">
			<listitem>
				<para>Program je nainstalovaný, takže složku sestavení můžete klidně promazat spuštěním <userinput>make clean</userinput>. Tím se odstraní všechny objektové soubory a program, ale ne už soubory Makefile.</para>
				<screen>
test -z "tut_prog" || rm -f tut_prog
rm -f *.o</screen>
				<para>Program nainstalovaný v <filename>/user/local/bin</filename> ale můžete samozřejmě nadále spouštět.</para>
			</listitem>
			<listitem>
				<para>Pokud byste chtěli odstranit nainstalovaný program, spusťte <userinput>make uninstall</userinput>. Podobně jako u instalace, musíte mít práva zápisu do složky, nebo použít <application>su</application> nebo <application>sudo</application>.</para>
				<screen>
rm -f '/usr/local/bin/tut_prog'</screen>
			</listitem>
			</orderedlist>
		</sect2>
		<sect2 id="create-autotools-generate">
			<title>Vygenerování projektu</title>
			<para>Abyste pochopili, co přesně se děje, je nejlepší si v rámci této výuky spustit jeden po druhém <userinput>aclocal</userinput>, <userinput>automake</userinput> a <userinput>autoconf</userinput>. Při skutečné práci by to ale bylo poněkud únavné, nehledě na další nástroje, které mohou být zapotřebí, jako <userinput>autoheader</userinput>, <userinput>autopoint</userinput> nebo <userinput>libtoolize</userinput>. Po vytvoření projektu by se o přegenerování souboru <filename>configure</filename> a všech souborů <filename>Makefile.in</filename> měly postarat speciální soubory <filename>Makefile</filename> vygenerované aplikací <application>configure</application>. Každopádně tu zůstává prostor k vylepšování a na výzvu existují i dvě odpovědi:</para>
			<variablelist>
				<varlistentry>
				<term>autoreconf</term>
				<listitem>
					<para>Jedná se o další nástroj z balíčku <application>Autoconf</application>, který spustí všechny skripty ve správném pořadí. Když chcete začít nový projekt, stačí spustit <userinput>autoreconf --install</userinput> a zavolají se všechny potřebné příkazy.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>autogen.sh</term>
				<listitem>
					<para>Jedná se o skript, který není součástí <application>Autotools</application>, ale dělá stejné věci. Se základním vývojářským balíčkem GNOME je šířen jeden takový, s názvem <filename>gnome-autogen.sh</filename>. Jiné projekty mohou mít napsaný svůj vlastní.</para>
				</listitem>
				</varlistentry>
			</variablelist>
		</sect2>
	</sect1>
	<sect1 id="create-anjuta"> 
		<title>Použití IDE <application>Anjuta</application></title>
		<para>Vytvoření projektu a IDE <application>Anjuta</application> vyžaduje jen pár kliknutí, ale pak si vytvořené soubory probereme.</para>
		<sect2 id="create-anjuta-new"> 
			<title>Vytvoření nového projektu</title>
			<orderedlist>
			<listitem>
				<para>Klikněte na <menuchoice><guisubmenu>Soubor</guisubmenu> <guisubmenu>Nový</guisubmenu> <guimenuitem>Projekt</guimenuitem></menuchoice>. Objeví se průvodce novým projektem.</para>
			</listitem>
			<listitem>
				<para>Klikněte na <guibutton>Následující</guibutton>. Objeví se stránka pro výběr projektu:</para>
				<figure>
					<title>Stránka pro výběr projektu</title>
					<screenshot>
						<mediaobject>
						<imageobject>
							<imagedata fileref="figures/new-project-select.png" format="PNG"/>
						</imageobject>
						</mediaobject>
					</screenshot>
				</figure>
			</listitem>
			<listitem>
				<para>Vyberte <guilabel>Obecný (minimální)</guilabel> projekt na kartě <guilabel>C</guilabel>.</para>
			</listitem>
			<listitem>
				<para>Klikněte na <guibutton>Následující</guibutton>.</para>
				<figure>
					<title>Stránka se základními informacemi o projektu</title>
					<screenshot>
						<mediaobject>
						<imageobject>
							<imagedata fileref="figures/new-project-basic.png" format="PNG"/>
						</imageobject>
						</mediaobject>
					</screenshot>
				</figure>
				<para>Změňte <guilabel>Název projektu</guilabel> na <userinput>tutprog</userinput>. Název by měl obsahovat jen písmena a číslice, případně podtržítko. Vyplňte zbývající pole.</para>
			</listitem>
			<listitem>
				<para>Klikněte na <guibutton>Následující</guibutton>.</para>
				<figure>
					<title>Stránka s volbami projektu</title>
					<screenshot>
						<mediaobject>
						<imageobject>
							<imagedata fileref="figures/new-project-options.png" format="PNG"/>
						</imageobject>
						</mediaobject>
					</screenshot>
				</figure>
				<para>Klikněte na <guilabel>Cíl</guilabel> a vytvořte pro svůj nový projekt novou složku nazvanou tutprog. V názvu složky se vyvarujte mezer a diakritiky. Všechny ostatní volby ponechejte na výchozích hodnotách, abychom dostali co nejmenší projekt.</para>
			</listitem>
			<listitem>
				<para>Klikněte na <guibutton>Následující</guibutton>.</para>
				<figure>
					<title>Stránka se souhrnným přehledem o projektu</title>
					<screenshot>
						<mediaobject>
						<imageobject>
							<imagedata fileref="figures/new-project-summary.png" format="PNG"/>
						</imageobject>
						</mediaobject>
					</screenshot>
				</figure>
				<para>Jedná se o poslední stránku průvodce, na které si zkontrolujte, jestli je vše správně.</para>
			</listitem>
			<listitem>
				<para>Klikněte na <guibutton>Použít</guibutton>. <application>Anjuta</application> vytvoří všechny potřebné soubory a složky a v okně zpráv uvidíte následující:</para>
				<figure>
					<title>Zprávy o vytváření projektu</title>
					<screenshot>
						<mediaobject>
						<imageobject>
							<imagedata fileref="figures/new-project-message.png" format="PNG"/>
						</imageobject>
						</mediaobject>
					</screenshot>
				</figure>
				<para>Po té je zavolán skript autogen.sh a spuštěn konfigurační skript. Nakonec <application>Anjuta</application> otevře nový projekt. Jelikož hlavní zdrojový kód již obsahuje pár řádků a proběhla konfigurace, můžete projekt přímo sestavit.</para>
			</listitem>
			</orderedlist>
		</sect2>
		<sect2 id="create-anjuta-configure"> 
			<title>Pohled do configure.ac</title>
			<example>
				<title>Nejzákladnější configure.ac v <application>Anjutě</application>:</title>
				<programlisting>
dnl Process this file with autoconf to produce a configure script.
dnl Created by Anjuta application wizard.

AC_INIT(tutprog, 0.1)

AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
AC_CONFIG_HEADERS([config.h])

AC_PROG_CC

AC_OUTPUT([
Makefile
])</programlisting>
			</example>
			<para>Stále je to docela jednoduché s pár makry navíc. Pojďme se podívat na ty, co ještě neznáme:</para>
			<variablelist>
				<varlistentry>
				<term>dnl</term>
				<listitem>
				<para>Nejedná se o makro, ale jen o značku začínající komentář v <application>M4</application>, což je jazyk použitý pro psaní <filename>configure.ac</filename>. Je to obdoba „#“ ve skriptech nebo „//“ v C++.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>AM_INIT_AUTOMAKE</term>
				<listitem>
				<para>Makro AC_INIT používá novou podobu s balíčkem a verzí, zatímco AM_INIT_AUTOMAKE se drží staré a v současnosti již není zapotřebí.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>AC_CONFIG_HEADERS</term>
				<listitem>
				<para>Říká nástroji <application>Autoconf</application>, aby předal všechny definice v souboru s názvem <filename>config.h</filename>, místo toho, aby použil několik přepínačů -Dxxxx na příkazové řádce (viz <xref linkend="create-autotools-build"/>). Když je jich hodně, je to jednodušší. Soubor s názvem <filename>config.h.in</filename> se vytvoří automaticky z <filename>configure.ac</filename> pomocí <application>autoheader</application>. Soubor <filename>config.h</filename> je pak vytvořen automaticky pomocí <application>configure</application>, podobně jako soubory makefile. Takže je to pro vývojáře bezbolestné.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>AC_OUTPUT</term>
				<listitem>
				<para>Jedná se o starou podobu AC_OUTPUT, ve které určujete všechny výstupní soubory, místo aby se použilo makro AC_CONFIG_FILES.</para>
				</listitem>
				</varlistentry>
			</variablelist>			
		</sect2>
		<sect2 id="create-anjuta-makefile"> 
			<title>Pohled do Makefile.am</title>
			<example>
				<title>Nejzákladní Makefile.am v <application>Anjutě</application>:</title>
				<programlisting>## Process this file with automake to produce Makefile.in
## Created by Anjuta

AM_CPPFLAGS = \
        -DPACKAGE_DATA_DIR=\""$(datadir)"\"

AM_CFLAGS =\
         -Wall\
         -g

bin_PROGRAMS = tutprog

tutprog_SOURCES = \
        main.c

tutprog_LDFLAGS =

tutprog_LDADD =</programlisting>
			</example>
			<para>Moc toho v <filename>Makefile.am</filename> není:</para>
			<variablelist>
				<varlistentry>
				<term>AM_CPPFLAGS</term>
				<listitem>
				<para>Používá se k předání dodatečných přepínačů preprocesoru C. Zde definuje dodatečnou konstantu PACKAGE_DATA_DIR nastavenou pomocí <application>configure</application>.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>AM_CFLAGS</term>
				<listitem>
				<para>Definuje některé dodatečné přepínače pro kompilátor C: zapíná všechna varování a ladicí informace, které jsme již viděli na začátku tohoto výukového materiálu (viz <xref linkend="build-gcc"/>).</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>tutprog_LDFLAGS</term>
				<listitem>
				<para>Přidává místo, do kterého můžete doplnit pro program tutprog dodatečné přepínače linkeru.</para>
				</listitem>
				</varlistentry>
				<varlistentry>
				<term>tutprog_LDADD</term>
				<listitem>
				<para>Přidává místo, do kterého můžete doplnit pro program tutprog dodatečné knihovny.</para>
				</listitem>
				</varlistentry>
			</variablelist>
		</sect2>
	</sect1>
</chapter>

<!-- Add library -->
<chapter id="library">
	<title>Přidání knihovny</title>
	<para>Tato kapitola vysvětluje, jak přidat do projektu novou knihovnu. Než se podíváme na <application>Anjutu</application>, začneme s <application>Autotools</application>.</para>
	<sect1 id="library-autotools"> 
		<title>Použití <application>Autotools</application></title>
		<para>Přidání nové knihovny do projektu založeného na Autotools může být více či méně snadné, záleží na tom, jak je knihovna zabalená. Abychom měli příklad, představte si, že chcete číst soubor XML pomocí <application>libxml2</application> (viz <ulink type="http" url="www.xmlsoft.org">domovská stránka knihovny na www.xmlsoft.org</ulink>).</para>
		<orderedlist>
		<listitem>	
			<para>Otevřete starý projekt z tohoto výukového materiálu a nahraďte <filename>main.c</filename> následujícím:</para>
			<example>
				<title>main.c používající <application>libxml2</application>:</title>
				<programlisting role="C">
#include &lt;libxml/parser.h&gt;			
#include &lt;stdio.h&gt;
			
int main()
{				
	xmlDocPtr doc;                                                                                                                  
	doc = xmlParseFile ("testfile.xml");

	if (doc == NULL) {
		printf ("Document not parsed successfully. \n");
		return -1;
	}
	else {
		printf ("Document parsed successfully.\n");
		xmlFreeDoc(doc);
		return 0;
	}
}</programlisting>
			</example>
		</listitem>
		</orderedlist>
		<para>Naším cílem je nyní zkompilovat jej a aby správně fungoval. Za tímto účelem musíme říci <application>GCC</application> dvě věci: kde najít libxml/parser.h (tzn. dát <application>GCC</application> správnou cestu k hlavičkovým souborům) a s jakou knihovnu (tj. sdíleným objektem) by se měl náš projekt slinkovat. Je několik způsobů, jak to udělat, tak začneme tím nejjednodušším.</para>
		<sect2 id="library-autotools-pkgconfig"> 
			<title>Pomocí pkg-config</title>
			<para><application>pkg-config</application> je nástroj, který se snaží poskytnout vývojářům jednotné rozhraní pro dotazování nainstalovaných knihoven na jejich verzi a všechny přepínače potřebné ke kompilaci a slinkování s nimi. Patří k němu i makro pro <application>Autoconf</application>, nazvané PKG_CHECK_MODULES, pomocí kterého se kontroluje přítomnost knihovny a nastavují všechny potřebné přepínače.</para>
			<orderedlist>
			<listitem>
				<para>Přidejte následujíc řádek do <filename>configure.ac</filename>.</para>
				<programlisting>PKG_CHECK_MODULES(XML, libxml-2.0 &gt;= 2.4)</programlisting>
				<para>Toto makro kontroluje přítomnost <application>libxml2</application> ve verzi vyšší nebo rovné 2.4 a vytvoří dvě proměnné, XML_CFLAGS a XML_LIBS, které budou obsahovat přepínače pro kompilátor C, respektive linker. <userinput>XML</userinput> je uživatelem definovaný název. <userinput>libxml-2.0</userinput> je název knihovny. Pro vypsání všech nainstalovaných knihoven můžete spustit <userinput>pkg-config --list-all</userinput>.</para>
			</listitem>
			<listitem>
				<para>Přidejte následujíc řádek do <filename>Makefile.am</filename>.</para>
				<programlisting>tut_prog_CPPFLAGS = $(XML_CFLAGS)
tut_prog_LDFLAGS= $(XML_LIBS)</programlisting>
				<para>Pro kompilaci vašeho programu se použijí přepínače, které našel skript <application>configure</application>, když spustil makro PKG_CHECK_MODULES.</para>
			</listitem>
			<listitem>
				<para>Toť vše. Můžete znovu spustit <userinput>make</userinput>.</para>
			<screen>
cd . &amp;&amp; /bin/sh /home/seb2008.1/Projects/tutprog/missing --run aclocal-1.10 
cd . &amp;&amp; /bin/sh /home/seb2008.1/Projects/tutprog/missing --run automake-1.10 --foreign 
cd . &amp;&amp; /bin/sh /home/seb2008.1/Projects/tutprog/missing --run autoconf
/bin/sh ./config.status --recheck
running CONFIG_SHELL=/bin/sh /bin/sh ./configure  --no-create --no-recursion
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... yes
checking for style of include used by make... GNU
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for library containing strerror... none required
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking dependency style of gcc... (cached) gcc3
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking dependency style of gcc... (cached) gcc3
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for XML... yes
configure: creating ./config.status
 /bin/sh ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
cd . &amp;&amp; /bin/sh /home/seb2008.1/Projects/tutprog/missing --run autoheader
rm -f stamp-h1
touch config.h.in
cd . &amp;&amp; /bin/sh ./config.status config.h
config.status: creating config.h
config.status: config.h is unchanged
make  all-am
make[1]: Entering directory `/home/seb/Projects/tutprog'
gcc -DHAVE_CONFIG_H -I.  -DPACKAGE_DATA_DIR=\""/usr/local/share"\" -I/usr/include/libxml2  \
        -Wall -g -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
mv -f .deps/main.Tpo .deps/main.Po
gcc -Wall -g -g -O2   -o tutprog main.o -lxml2   
make[1]: Leaving directory `/home/seb/Projects/tutprog'</screen>
				<para>Není potřeba znovu spouštět <application>Autoconf</application> nebo <application>Automake</application>, protože vygenerovaný Makefile již obsahuje nějaká pravidla, která to udělají.</para>
			</listitem> 
			</orderedlist>
			<tip>
				<para>Když se instaluje knihovna podporující pkg-config, zkopíruje se spolu s ní do systémové složky, obvykle <filename>/usr/lib/pkgconfig</filename>, malý textový soubor s příponou .pc. Při instalaci ze zdrojových kódů je předvolenou složkou <filename>/usr/local/lib/pkgconfig</filename>. Můžete požádat <application>pkg-config</application>, aby hledal i v této složce, nastavením proměnné prostředí <userinput> PKG_CONFIG_PATH=/usr/local/lib/pkgconfig</userinput>.</para>
			</tip>
		</sect2>
		<sect2 id="library-autotools-m4"> 
			<title>S nějakým makrem z <application>Autoconf</application></title>
			<para>Pokud knihovna nepodporuje <application>pkg-config</application>, tj. neobjevuje se ve výpise vráceném příkazem <userinput>pkg-config --list-all</userinput>, potřebujete makro z <application>Autoconf</application>: <itemizedlist>
				<listitem>
					<para>Podívejte se, jestli autor knihovny šíří i makro <application>M4</application>, a pokud ano, použijte jej. Jedná se o textový soubor nazvaný stejně jako knihovna, akorát s příponou .m4, a často je nainstalován v <filename>/usr/share/aclocal</filename>.</para>
				</listitem>
				<listitem>
					<para>Pokud se jedná o některou ze základních knihoven, může se kontrolovat pomocí standardních maker <application>Autoconf</application> (viz seznam <ulink type="http" url="http://sources.redhat.com/autobook/autobook/autobook_283.html#SEC283">zde</ulink>).</para>
				</listitem>
				<listitem>
					<para>Možná makro <application>M4</application>, které potřebujete, již někdo jiný naprogramoval. Podívejte se na příspěvky <ulink type="http" url="http://www.gnu.org/software/ac-archive/">zde</ulink>.</para>
				</listitem>
				<listitem>
					<para>Pokud všechno selže, zanořte se do <application>M4</application> hlouběji, vytvořte své vlastní makro a přispějte jím autorovi knihovny!</para>
				</listitem>
				</itemizedlist></para>
			<para>Pokud makro máte, můžete jej nakopírovat do <filename>/usr/share/aclocal</filename>, aby jej <application>aclocal</application> našel. Pak už se jen stačí podívat do souboru s makrem, jak jej použít. <application>libxml2</application> instaluje makro s názvem AM_PATH_XML2, které najdete v <filename>/usr/share/aclocal/libxml.m4</filename>.</para>
			<orderedlist>
			<listitem>
				<para>Přidejte následujíc řádek do <filename>configure.ac</filename>.</para>
				<programlisting>AM_PATH_XML2(2.4.0)</programlisting>
				<para>Tohle makro bude kontrolovat přítomnost knihovny s verzí vyšší nebo rovnou 2.4 a vytvoří dvě proměnné, XML_CPPFLAGS and XML_LIBS, které budou obsahovat přepínače pro kompilátor C, respektive pro linker. Tyhle informace získáte z komentářů v souboru s makrem.</para>
			</listitem>
			<listitem>
				<para>Přidejte následujíc řádek do <filename>Makefile.am</filename>.</para>
				<programlisting>tut_prog_CPPFLAGS = $(XML_CPPFLAGS)
tut_prog_LDFLAGS= $(XML_LIBS)</programlisting>
				<para>Pro kompilaci programu se použijí přepínače nalezené skriptem configure. Všimněte si, že makro pomocí <application>pkg-config</application> definovalo XML_CPPFLAGS, a ne XML_CFLAGS. Použití CPPFLAGS dává větší smysl, protože tyto přepínače jsou používány preprocesorem C, nejčastěji jen k nastavení cesty k hlavičkovým souborům.</para>
			</listitem>
			<listitem>
				<para>Toť vše. Můžete znovu spustit <userinput>make</userinput>. Vygenerovaný <filename>Makefile</filename> je téměř stejný.</para>
			</listitem>
			</orderedlist>
		</sect2>	
		<sect2 id="library-autotools-lame"> 
			<title>Pomocí pevně určených cest ke knihovnám</title>
			<para>Jde o přístup, který by člověka přirozeně napadl – přímo <application>GCC</application> předat to, co potřebuje. Například bývá v linuxových systémech <filename>libxml/parser.h</filename> uložený v <filename class="directory">/usr/include/libxml2</filename> a sdílený objekt „libxml.so“ v <filename>/usr/lib</filename>. (Budeme předpokládat, že to máte stejně.)</para>
			<orderedlist>
			<listitem>
				<para>Přidejte následujíc řádek do <filename>Makefile.am</filename>.</para>
				<programlisting>tut_prog_CPPFLAGS = -I /usr/include/libxml2
tut_prog_LDFLAGS= -lxml2</programlisting>
				<para>Není potřeba měnit <filename>configure.ac</filename>, protože nic nekontrolujete a prostě předpokládáte, že všechny hostitelské systémy budou mít správné knihovny na stejném místě, jako vy.</para>
			</listitem>
			<listitem>
				<para>Můžete spustit <userinput>make</userinput> a pokud to máte v systému stejně, jak bylo zmíněno, mělo by to fungovat.</para>
			<screen>
 cd . &amp;&amp; /bin/sh /home/seb2008.1/Projects/tutprog/missing --run automake-1.10 --foreign  Makefile
 cd . &amp;&amp; /bin/sh ./config.status Makefile depfiles
config.status: creating Makefile
config.status: executing depfiles commands
make  all-am
make[1]: Entering directory `/home/seb/Projects/tutprog'
gcc -DHAVE_CONFIG_H -I.  -DPACKAGE_DATA_DIR=\""/usr/local/share"\" -I /usr/include/libxml2  \
    -Wall -g -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
mv -f .deps/main.Tpo .deps/main.Po
gcc -Wall -g -g -O2   -o tutprog main.o -lxml2 
make[1]: Leaving directory `/home/seb/Projects/tutprog'</screen>
			</listitem>
			</orderedlist>
			<para>Tohle jsme si zde popsali, abychom viděli, jak jednoduše se to dá udělat s pomocí <application>Autotools</application>. Tento přístup má ale několik nevýhod: <itemizedlist>
					<listitem>
						<para>Není to univerzálně přenositelné na jiné verze linuxu: v jiné distribuci je třeba cesta k hlavičkovým souborům jiná.</para>
					</listitem>
					<listitem>
						<para>Když bude mít příští verze knihovny libxml jiné cesty nebo jiné závislosti na knihovnách, budeme muset projekt aktualizovat.</para>
					</listitem>
					<listitem>
						<para>Netestujeme, jestli má systém balíčkáře/uživatele knihovnu.</para>
					</listitem>
					<listitem>
						<para>Nemůžeme zkontrolovat, kterou verzi <application>libxml2</application> používáme.</para>
					</listitem>
				</itemizedlist></para>
		</sect2>
	</sect1>
	<sect1 id="library-anjuta"> 
		<title>Použití IDE <application>Anjuta</application></title>
		<para>Při použití <application>Anjuty</application> jde přidat knihovnu podporující <application>pkg-config</application> téměř bez použití klávesnice.</para>
		<sect2 id="library-anjuta-pkgconfig"> 
			<title>Pomocí pkg-config</title>
			<orderedlist>
			<listitem>
				<para>Otevřete soubor <filename>main.c</filename> z projektu, který jsem v <application>Anjutě</application> vytvořili v předchozí kapitole. Nahraďte jeho obsah následujícím textem:</para>
				<example>
				<title>main.c používající <application>libxml2</application>:</title>
				<programlisting role="C">
#include &lt;libxml/parser.h&gt;			
#include &lt;stdio.h&gt;
			
int main()
{				
	xmlDocPtr doc;                                                                                                                  
	doc = xmlParseFile ("testfile.xml");

	if (doc == NULL) {
		printf ("Document not parsed successfully. \n");
		return -1;
	}
	else {
		printf ("Document parsed successfully.\n");
		xmlFreeDoc(doc);
		return 0;
	}
}</programlisting>
				</example>
			</listitem>
			<listitem>
				<para>Vyberte <menuchoice><guisubmenu>Projekt</guisubmenu> <guimenuitem>Vlastnosti</guimenuitem> <guilabel>Balíčky</guilabel></menuchoice> a objeví se dialogové okno s vlastnostmi balíčku.</para>
			</listitem>
			<listitem>
				<para>Klikněte na tlačítko <guibutton>Přidat modul</guibutton> a do sloupce <guilabel>Modul/balíček</guilabel> zadejte název, např. „XML“.</para>
			</listitem>
			<listitem>
				<para>Klikněte na tlačítko <guibutton>Přidat balíček</guibutton>, které by teď mělo být přístupné. Objeví se dialogové okno, ve kterém můžete vybrat knihovnu, kterou chcete použít. V tomto dialogovém okně jsou vypsané všechny knihovny podporující <application>pkg-config</application>. Vyberte <userinput>libxml-2.0</userinput>. Pak klikněte na tlačítko <guibutton>Přidat</guibutton>.</para>
			</listitem>
			<listitem>
				<para>Dialogové okno s vlastnostmi balíčku by mělo vypadat nějak následovně:</para>
				<figure>
					<title>Dialogové okno s vlastnosti projektového balíčku</title>
					<screenshot>
					<mediaobject>
					<imageobject>
						<imagedata fileref="figures/library-add-pkgconfig.png" format="PNG"/>
					</imageobject>
					</mediaobject>
					</screenshot>
				</figure>
				<para>Modul XML obsahuje knihovnu s názvem libxml-2.0. Můžete určit minimální požadovanou verzi kliknutím ve sloupci verze a napsáním <userinput>&gt;= 2.4</userinput>. Tím se zapíší potřebné řádky do souboru <filename>configure.ac</filename>.</para>
			</listitem>
			<listitem>
				<para>Zavřete dialogové okno a vyberte <menuchoice><guisubmenu>Projekt</guisubmenu> <guimenuitem>Aktualizovat</guimenuitem></menuchoice>. Nemělo by to být potřeba, ale u aktuální verze <application>Anjuty</application> je to bohužel nutné. Bylo to již nahlášeno jako chyba (#541694) a bude to opraveno.</para>
			</listitem>
			<listitem>
				<para>V zobrazení projektu vyberte cíl projektu tutprog a klikněte na něj pravým tlačítkem, aby se objevila kontextová nabídka, ve které vyberte <guilabel>Vlastnosti</guilabel>. Objeví se dialogové okno s vlastnostmi cíle.</para>
			</listitem>
			<listitem>
				<para>V dialogovém okně jsou uvedené všechny moduly dostupné ve vašem projektu, takže stačí jednoduše zaškrtnout modul XML. Tím se příslušně změní soubor <filename>Makefile.am</filename>, aby používal správnou knihovnu.</para>
				<figure>
					<title>Dialogové okno s vlastnostmi cíle</title>
					<screenshot>
					<mediaobject>
					<imageobject>
						<imagedata fileref="figures/library-add-properties.png" format="PNG"/>
					</imageobject>
					</mediaobject>
					</screenshot>
				</figure>
			</listitem>
			<listitem>
				<para>Klikněte na <guibutton>Zavřít</guibutton> a tím je vše hotovo. Můžete vybrat <menuchoice><guisubmenu>Sestavit</guisubmenu> <guimenuitem>Sestavit</guimenuitem></menuchoice>, aby se váš projekt znovu sestavil.</para>
			</listitem>
			</orderedlist>
		</sect2>
		<sect2 id="library-anjuta-no-pkgconfig"> 
			<title>Bez pkg-config</title>
			<para><application>Anjuta</application> nemá skutečnou podporu pro knihovny, které nepoužívají <application>pkg-config</application>. Abyste přidali potřebná makra, musíte upravit <filename>configure.ac</filename> přímo. Pro předání přepínačů do jednotlivých cílů můžete použít tlačítko <guibutton>Pokročilé</guibutton> v dialogovém okně s vlastnostmi cíle.</para>
		</sect2>
	</sect1>
</chapter>

<!-- Resources -->
<chapter id="resources">
	<title>Odkazy</title>
	<para>Zde jsou odkazy na dokumentaci, která se zabývá <application>Autotools</application> obecně a konkrétně pak nástroji <application>Autoconf</application> a <application>Automake</application>.</para>
				
	<variablelist>
		<varlistentry>
			<term>V anličtině</term>

			<listitem>
				<itemizedlist>
				<listitem>
					<para>Pro začátek se můžete podívat do referenčních příruček k <ulink type="http" url="http://www.gnu.org/software/autoconf/manual/autoconf.html">Autoconf</ulink>, <ulink type="http" url="http://www.gnu.org/software/automake/manual/automake.html">Automake</ulink>, <ulink type="http" url="http://www.gnu.org/software/libtool/manual/libtool.html">Libtool</ulink>, <ulink type="http" url="http://www.gnu.org/software/make/manual/make.html">make</ulink> a <ulink type="http" url="http://www.gnu.org/software/m4/manual/m4.html">M4</ulink>.</para>
				</listitem>

				<listitem>
					<para>V <ulink type="http" url="http://sources.redhat.com/autobook/autobook/autobook_toc.html">Autobook</ulink> je podrobně rozebráno, jak fungují <application>Autotools</application>.</para>
				</listitem>

				<listitem>
					<para>Mezi různými vývojářskými nástroji GNU, o kterých jsme mluvili <ulink type="http" url="http://autotoolset.sourceforge.net/tutorial.html">zde</ulink>, jsou <application>Autoconf</application> a <application>Automake</application>.</para>
				</listitem>

				<listitem>
					<para><ulink url="http://www.lrde.epita.fr/~adl/autotools.html">Zde</ulink> a <ulink url="http://seul.org/docs/autotut/">zde</ulink> jsou dva základní výukové materiály k <application>Autotools</application>.</para>
	 			</listitem>
				</itemizedlist>
			</listitem>
		</varlistentry>
		<varlistentry>
			<term>V češtině</term>
			<listitem><para>Na server ROOT vyšel <ulink type="http" url="https://www.root.cz/serialy/gnu-pomoc-pri-tvorbe-programu/">seriál o nástrojích GNU</ulink> s kapitolami <ulink type="http" url="https://www.root.cz/clanky/gnu-pomoc-pri-tvorbe-programu-autoconf/">Autoconf</ulink> a <ulink type="http" url="https://www.root.cz/clanky/gnu-pomoc-pri-tvorbe-programu-automake/">Automake</ulink>.</para>
			</listitem>
		</varlistentry>
		<varlistentry>
			<term>Ve slovenštině</term>
			<listitem>
			<para><ulink type="http" url="https://smnd.sk/anino/programming/tools/automake/automake.html">Zde</ulink> je jeden kratší článek o <application>Automake</application>.</para></listitem>
		</varlistentry>
	</variablelist>
	<tip>
		<para>Tento výukový materiál používá <application>Autoconf 2.61 (z listopadu 2006)</application> a <application>Automake 1.10.1 (leden 2008)</application>. Některé z těchto dokumentů používají starší verze a syntax se mohla trochu změnit. Starší syntax obvykle stále funguje a používá se ve starších projektech. Je dobré ji znát, ale není dobrý nápad ji používat v nových projektech.</para>
	</tip>
</chapter>
</book>
