Monday, June 21, 2010

Combining GNU Autotools with Qt to One Build System

As you have probably aware, when you have a project that uses GNU Autotools (autoconf, automake, libtool) and Qt, there are two different build systems in use. First is the GNU autotools build system and the second is the Qt build system (Qmake, etc.).

The weakness of using two independent build system probably is not too obvious. However, when you start trying to build the whole project outside of the root directory of the source code, the build will fail. With GNU autotools itself, the build will be successful. Then how do you migrate from Qt build system to GNU autotools? It's simple, use Autotroll (http://tsunanet.net/autotroll/). Autotroll is a set of m4 file and makefile which will help you carry-out what qmake do. This way, the build system will be unified into GNU autotools build system. No more calls to qmake manually (or within a script you made).

Wednesday, June 9, 2010

Building Qt Application on 64-bit Multilib Systems

Some Qt application cannot build correctly on 64-bit multilib systems by default. For example, the Italc application (http://italc.sf.net). The problem is, the default search path for Qt library usually set to the 32-bit qt library whereas the default C++ (GNU g++) compiler is 64 bit one. To force the application build process to use the 64-bit Qt library, you must set the QTDIR environment variable to the path_to_64_bit_Qt_library. For example, in my machine this is how I build the Italc application:

darmawan@opunaga:italc-1.0.9$ QTDIR="/usr/lib64/qt" ./configure --prefix=/usr --libdir=/usr/lib64
checking for a BSD-compatible install... /usr/bin/ginstall -c
checking whether build environment is sane... yes
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
...