Developpez.com - Rubrique Qt

Le Club des Développeurs et IT Pro

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:
Code :
$ sudo apt install qt-default automake autoconf build-essential g++ pkg-config moc
le fichier configue.ac est le suivant (à modifier en fonction du projet):
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
Le fichier Makefile.am à la racine du projet, à modifier selon votre projet:
Code :
SUBDIRS = src
Le fichier src/Makefile.am, à modifier selon votre projet:
Code :
1
2
3
bin_PROGRAMS = hello
hello_CXXFLAGS=-I /usr/include/x86_64-linux-gnu/qt5
hello_SOURCES = main.cpp
si vous utilisez une distribution 32 bits, ce fichier src/Makefile.am sera plus adéquat:
Code :
1
2
3
bin_PROGRAMS = hello
hello_CXXFLAGS=-I /usr/include/i386-linux-gnu/qt5
hello_SOURCES = main.cpp
vous pouvez maintenant utiliser les autotools:
Code :
1
2
$ touch AUTHORS ChangeLog NEWS README
$ aclocal && autoheader && automake --gnu -c -a && autoconf
il serait bien de remplir les fichier AUTHORS, ChangeLog, NEWS et README

pour vérifier si ça fonctionne:
Code :
1
2
3
$ ./configure --prefix=/usr
$ make
$ make DESTDIR=/un/chemin install
ceci installera les fichiers cibles dans /un/chemin. On peut le vérifier avec find
Code :
$ find /un/chemin
l'installation DESTDIR sert à construire un paquet binaire pour votre distribution
pour remettre le projet dans l'état initial:
Code :
$ make distclean
pour créer le tarball en .tar.bz2:
Code :
1
2
$ ./configure
$ make dist-bzip2
pour créer le tarball en .tar.gz:
Code :
1
2
$ ./configure
$ make dist
  Billet blog