[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: building a qt library
From: |
Ralf Wildenhues |
Subject: |
Re: building a qt library |
Date: |
Wed, 3 Dec 2008 07:48:57 +0100 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
Hello Craig,
a couple of comments to the configure.ac script and Makefile.am file you
posted:
* Craig Sanders wrote on Fri, Nov 28, 2008 at 01:58:56AM CET:
>
> AC_INIT(
> [simple_signal_emitter_autotools],
> [0.0.1],
> address@hidden,
> [simple_signal_emitter_autotools])
>
> # Inform aclocal and friends of where they can find additional
> # local Autoconf macros.
>
> m4_include([./m4/bnv_have_qt.m4])
While this line is completely OK as it is, I would prefer doing it
differently:
- Generally, do not use `./' prefixes to files unless there is a
specific reason to do so. Why is that a good idea? By this
inclusion, the file m4/bnv_have_qt.m4 becomes a prerequisite of
the configure script, and automake will be smart enough to notice
this dependency and add the file to the configure regeneration
rule in Makefile.in. Now, however, most non-GNU make implementations
do not identify `./FILE' with `FILE' in target or prerequisiste
names. So, in the hypothetical case that, for example, you have
a rule to generate `m4/bnv_have_qt.m4', then it would not be
updated before configure were out of date. Omitting `./'
would prevent this issue.
Of course this is not likely to have an effect in this case,
but it's a good rule to obey for portable makefiles.
- For third-party m4 files that provide extra macros, a good convention
to use is to let aclocal find them automatically, and maybe even
install updated versions into your package automatically. The former
can be achieved by
-- adding `ACLOCAL_AMFLAGS = -I m4' to the toplevel Makefile.am;
autoreconf will then pick this up when running aclocal; if you
invoke it manually, you should add these flags as first options.
The latter can be achieved with additionally
-- adding AC_CONFIG_MACRO_DIR([m4]) to configure.ac,
-- and then using `aclocal --install' (this requires Automake 1.10
or newer)
You can then just omit the m4_include line completely from
configure.ac, and notice that aclocal will put such a line into
aclocal.m4.
> AC_CONFIG_AUX_DIR(config)
>
> AM_INIT_AUTOMAKE(
> [simple_signal_emitter_autotools],
> [0.1])
This format is the old-style invocation of AM_INIT_AUTOMAKE.
You don't need it: you are already using the new-style AC_INIT
which provides package name and version number. Moreover, you
are using inconsistent version numbers in both. Solution is
to use plain `AM_INIT_AUTOMAKE' without further arguments here.
You can then decide to add Options in the first argument if you
like.
> AC_CONFIG_SRCDIR(
> [./src/main.cpp])
Again, I'd omit the `./'
> AC_PROG_CC
>
> AC_PROG_LIBTOOL
>
> AC_PROG_CXX(
> [${CXX}])
Why this argument? Plain AC_PROG_CXX should be equivalent in semantics
(a default list of compiler names is tried unless $CXX is set).
> AC_PROG_LIBTOOL
>
> BNV_HAVE_QT()
>
> AC_OUTPUT([
> Makefile
> ])
[ Makefile.am: ]
> bin_PROGRAMS = main
>
> main_MOC_FILES = ./moc_MySignalEmitter.cpp
Again, please omit leading `./'; several more instances.
> main_SOURCES = ./src/main.cpp \
> ./src/MySignalEmitter.cpp \
> ${main_MOC_FILES}
>
> main_CXXFLAGS = ${QT_CXXFLAGS} -I${srcdir}/include
>
> main_LDFLAGS = ${QT_LIBS}
>
>
> CLEANFILES = ${main_MOC_FILES}
>
> # Inform make of how to handle C++ Header files (.hpp) that need
> # to be processed by the Qt Meta Object Compiler (moc).
>
> .hpp.cpp:
> @echo ""
> @echo "----------------------------------------"
> @echo "moc is creating the file : address@hidden"
> @echo "... in directory : address@hidden/"
> @echo "... from input file : $< "
> @echo "$<"
> @echo ""
> ${QT_MOC} -o address@hidden $<