GNU autotools: Porovnání verzí
mBez shrnutí editace |
|||
| (Nejsou zobrazeny 3 mezilehlé verze od 2 dalších uživatelů.) | |||
| Řádek 1: | Řádek 1: | ||
{{GNU}} | {{GNU}} | ||
'''GNU autotools''' je sada programů (aclocal, autoheader, autoconf, automake a další) pro generování skriptů pro překlad a sestavení GNU programů. Následující příklady v žádném případě nemají a nemohou nahradit dokumentaci, mají pouze posloužit pro první základní představu kde a jak začít. | '''GNU autotools''' je sada programů (aclocal, autoheader, autoconf, automake a další) pro generování skriptů pro překlad a sestavení GNU programů. Následující příklady v žádném případě nemají a nemohou nahradit dokumentaci, mají pouze posloužit pro první základní představu kde a jak začít. | ||
== Vybrané odkazy == | |||
* [http://www.flameeyes.eu/autotools-mythbuster Autotools Mythbuster] | |||
== Založení projektu == | == Založení projektu == | ||
| Řádek 53: | Řádek 57: | ||
EXTRA_DIST = autogen.sh</pre> | EXTRA_DIST = autogen.sh</pre> | ||
Poslední uvedený soubor autogen.sh slouží pro vytvoření skriptu configure a byl vytvořen pouze jako pomůcka pro | Poslední uvedený soubor autogen.sh slouží pro vytvoření skriptu configure a byl vytvořen pouze jako pomůcka pro snazší inicializaci projektu | ||
$ sh autogen.sh | $ sh autogen.sh | ||
| Řádek 124: | Řádek 128: | ||
#define VERSION "1.0"</pre> | #define VERSION "1.0"</pre> | ||
a soubor Makefile se standardními pravidly projektu GNU. Například vytvoření distribučního tar archivu s kontrolou všech formálních náležitostí se provede | a soubor Makefile se standardními pravidly projektu GNU. Například vytvoření distribučního tar archivu s kontrolou všech formálních náležitostí se provede příkazem | ||
$ make distcheck | $ make distcheck | ||
Aktuální verze z 24. 10. 2010, 08:22
GNU autotools je sada programů (aclocal, autoheader, autoconf, automake a další) pro generování skriptů pro překlad a sestavení GNU programů. Následující příklady v žádném případě nemají a nemohou nahradit dokumentaci, mají pouze posloužit pro první základní představu kde a jak začít.
Vybrané odkazy
Založení projektu
GNU projekty povinně vyžadují soubory README, NEWS, AUTHORS a ChangeLog
$ touch README NEWS AUTHORS ChangeLog
Součástí projektu jsou i instalační skripty, které v našem příkladu budeme ukládat do podadresáře config.aux
$ mkdir config.aux
Základní definice celého projektu jsou definovány v souboru configure.ac, sestavení a překlad definuje soubor (soubory) Makefile.am
configure.ac
# pozadavovan verze programu autoconf
AC_PREREQ(2.61)
# [projekt], [verze], [kotakt]
AC_INIT([demo], [1.0], [j.pytel@nop.com])
AC_CONFIG_SRCDIR([.])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_AUX_DIR([config.aux])
AM_INIT_AUTOMAKE
# priklad predavani smbolickych promennych
# vystupni promenna a jeji hodnota, ktera muze
# byt pouzivana napr. souborech Makefile.am a pod.
AC_SUBST([PROMENNA_GNU_AUTOTOOLS], [asdfghjkl])
# definice makra v souboru config.h ([jmeno], [hodnota], [komentar])
AC_DEFINE_UNQUOTED([DEMO_CPP_MAKRO],
[$PROMENNA_GNU_AUTOTOOLS],
[popis makra])
# programy vyzadovane projektem
AC_PROG_CXX
AC_PROG_CC
# obecne seznam souboru Makefile, ktere se maji vygenerovat
AC_OUTPUT([Makefile])
Makefile.am
bin_PROGRAMS = demo demo_SOURCES = demo.cpp EXTRA_DIST = autogen.sh
Poslední uvedený soubor autogen.sh slouží pro vytvoření skriptu configure a byl vytvořen pouze jako pomůcka pro snazší inicializaci projektu
$ sh autogen.sh
autogen.sh
#!/bin/sh # eventually run autoreconf when it will work better # autoreconf --force --install -I config aclocal autoheader autoconf automake -a -c -f
Demo 1.0
Jako příklad použijeme program demo verze 1.0, který ukazuje, jak předat proměnné definované v souboru configure.ac do C/C++ programu.
#include <iostream>
#include <string>
#include "config.h"
#define str(s) # s
#define xstr(s) str(s)
int main()
{
// prevod makra na c-retezec a dale na std::string
std::string s = xstr(DEMO_CPP_MAKRO);
std::cout << s << "\n";
}
Sestavení programu zajistí příkazy
$ ./configure $ make
Skript configure vygeneruje soubor config.h
/* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ /* popis makra */ #define DEMO_CPP_MAKRO asdfghjkl /* Name of package */ #define PACKAGE "demo" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "j.pytel@nop.com" /* Define to the full name of this package. */ #define PACKAGE_NAME "demo" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "demo 1.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "demo" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.0" /* Version number of package */ #define VERSION "1.0"
a soubor Makefile se standardními pravidly projektu GNU. Například vytvoření distribučního tar archivu s kontrolou všech formálních náležitostí se provede příkazem
$ make distcheck