Compiler une application Qt avec les autotools (autoconf) sous Linux
Un billet de blog de matser
Le 21/12/2015, par emmesse, Membre averti
Bonjour à tous
Je vais vous montrer comment utiliser les autotools avec Qt.
Je suppose que vous avez quelques bases avec automake et autoconf.
si vous êtes sous ubuntu, installez qt et autres comme ceci:
le fichier configue.ac est le suivant (à modifier en fonction du projet):
Le fichier Makefile.am à la racine du projet, à modifier selon votre projet:
Le fichier src/Makefile.am, à modifier selon votre projet:
si vous utilisez une distribution 32 bits, ce fichier src/Makefile.am sera plus adéquat:
vous pouvez maintenant utiliser les autotools:
il serait bien de remplir les fichier AUTHORS, ChangeLog, NEWS et README
pour vérifier si ça fonctionne:
ceci installera les fichiers cibles dans /un/chemin. On peut le vérifier avec find
l'installation DESTDIR sert à construire un paquet binaire pour votre distribution
pour remettre le projet dans l'état initial:
pour créer le tarball en .tar.bz2:
pour créer le tarball en .tar.gz:
Je vais vous montrer comment utiliser les autotools avec Qt.
Je suppose que vous avez quelques bases avec automake et autoconf.
si vous êtes sous ubuntu, installez qt et autres comme ceci:
Code : |
$ sudo apt install qt-default automake autoconf build-essential g++ pkg-config moc
Code : |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([bouton], [1.0], [votre@e.mail]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([src/main.cpp]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CXX #AM_CXXFLAGS=-I @top_srcdir@/include # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. PKG_PROG_PKG_CONFIG # ... # Check for Qt libraries PKG_CHECK_MODULES(QT, [QtCore, QtGui], [], [AC_MSG_ERROR([Qt libraries are required.])]) # Retrieve Qt compilation and linker flags CPPFLAGS="`$PKG_CONFIG --cflags-only-I QtCore QtGui` $CPPFLAGS" LDFLAGS="`$PKG_CONFIG --libs-only-L QtCore QtGui` $LDFLAGS" LIBS="`$PKG_CONFIG --libs-only-l QtCore QtGui` $LIBS" AC_CHECK_PROGS(MOC, [moc-qt5 moc-qt4 moc]) AC_CHECK_PROGS(UIC, [uic-qt5 uic-qt4 uic]) AC_CHECK_PROGS(RCC, [rcc]) if test -z "$MOC" || test -z "$UIC" || test -z "$RCC"; then AC_MSG_ERROR([Qt utility programs moc, uic, and rcc are required.]) fi AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT |
Code : |
SUBDIRS = src
Code : |
1 2 3 | bin_PROGRAMS = hello hello_CXXFLAGS=-I /usr/include/x86_64-linux-gnu/qt5 hello_SOURCES = main.cpp |
Code : |
1 2 3 | bin_PROGRAMS = hello hello_CXXFLAGS=-I /usr/include/i386-linux-gnu/qt5 hello_SOURCES = main.cpp |
Code : |
1 2 | $ touch AUTHORS ChangeLog NEWS README $ aclocal && autoheader && automake --gnu -c -a && autoconf |
pour vérifier si ça fonctionne:
Code : |
1 2 3 | $ ./configure --prefix=/usr $ make $ make DESTDIR=/un/chemin install |
Code : |
$ find /un/chemin
pour remettre le projet dans l'état initial:
Code : |
$ make distclean
Code : |
1 2 | $ ./configure $ make dist-bzip2 |
Code : |
1 2 | $ ./configure $ make dist |