[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: adding specific C flags for a SINGLE source file
From: |
Bruce Allen |
Subject: |
Re: adding specific C flags for a SINGLE source file |
Date: |
Thu, 9 Dec 2004 18:20:06 -0600 (CST) |
Alexandre,
this comes *really* close to working. Problem is that in the Makefile one
ends up with:
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(libboincbenchmark_a_CPPFLAGS) $(CPPFLAGS) $(libboincbenchmark_a_CXXFLAGS)
$(CXXFLAGS)
Notice (grrrr!!) that user's $(CXXFLAGS) is *last*. So I can't over-ride
it with libboincbenchmark_a_CXXFLAGS.
In other words:
libboincbenchmark_a_CXXFLAGS=-O3
CXXFLAGS=-g -O2
and I end up with
-O3 -g -O2.
Any idea how to get around this?
Cheers,
Bruce
On Fri, 10 Dec 2004, Alexandre Duret-Lutz wrote:
> How about this proposed new entry for the FAQ?
>
> 26.7 Per-Object Flags Emulation
> ===============================
>
> One of my source files needs to be compiled with different flags. How
> do I do?
>
> Automake supports per-program and per-library compilation flags (see
> *Note Program and Library Variables:: and *Note Flag Variables
> Ordering::). With this you can define compilation flags that apply to
> all files compiled for a target. For instance in
>
> bin_PROGRAMS = foo
> foo_SOURCES = foo.c foo.h bar.c bar.h main.c
> foo_CFLAGS = -some -flags
>
> `foo-foo.o', `foo-bar.o', and `foo-main.o' will all be compiled with
> `-some -flags'. (If you wonder about the names of these object files,
> see *Note renamed objects::.) Note that `foo_CFLAGS' gives the flags
> to use when compiling all the C sources of the _program_ `foo', it has
> nothing to do with `foo.c' or `foo-foo.o' specifically.
>
> What if `foo.c' needs to be compiled into `foo.o' using some
> specific flags, that none of the other files require? Obviously
> per-program flags are not directly applicable here. Something like
> per-object flags are expected, i.e., flags that would be used only when
> creating `foo-foo.o'. Automake does not support that, however this is
> easy to simulate using a library that contains only that object, and
> compiling this library with per-library flags.
>
> bin_PROGRAMS = foo
> foo_SOURCES = bar.c bar.h main.c
> foo_CFLAGS = -some -flags
> foo_LDADD = libfoo.a
> noinst_LIBRARIES = libfoo.a
> libfoo_a_SOURCES = foo.c foo.h
> libfoo_a_CFLAGS = -some -other -flags
>
> Here `foo-bar.o' and `foo-main.o' will all be compiled with `-some
> -flags', while `libfoo_a-foo.o' will be compiled using `-some -other
> -flags'. Eventually, all three objects will be linked to form `foo'.
>
> This trick can also be achieved using Libtool convenience libraries,
> i.e., `noinst_LTLIBRARIES = libfoo.la' (*note Libtool Convenience
> Libraries::).
>
> Another tempting idea to implement per-object flags is to override
> the compile rules `automake' would output for these files. Automake
> will not define a rule for a target you have defined, so you could
> think about defining the `foo-foo.o: foo.c' rule yourself. We
> recommend against this, because this is error prone. For instance if
> you add such a rule to the first example, it will break the day you
> decide to remove `foo_CFLAGS' (because `foo.c' will then be compiled as
> `foo.o' instead of `foo-foo.o', see *Note renamed objects::). Also in
> order to support dependency tracking, the two `.o'/`.obj' extensions,
> and all the other flags variables involved in a compilation, you will
> end up modifying a copy of the rule previously output by `automake' for
> this file. If a new release of Automake generates a different rule,
> your copy will need to be updated by hand.
>
> --
> Alexandre Duret-Lutz
>
>
- adding specific C flags for a SINGLE source file, Bruce Allen, 2004/12/08
- Re: adding specific C flags for a SINGLE source file, Stepan Kasal, 2004/12/09
- Re: adding specific C flags for a SINGLE source file, Alexandre Duret-Lutz, 2004/12/09
- Re: adding specific C flags for a SINGLE source file, Bruce Allen, 2004/12/09
- Re: adding specific C flags for a SINGLE source file,
Bruce Allen <=
- Re: adding specific C flags for a SINGLE source file, Sander Niemeijer, 2004/12/10
- Re: adding specific C flags for a SINGLE source file, Kevin P. Fleming, 2004/12/10
- Re: adding specific C flags for a SINGLE source file, Jacob Meuser, 2004/12/10
- Re: adding specific C flags for a SINGLE source file, Alexandre Duret-Lutz, 2004/12/10
- Re: adding specific C flags for a SINGLE source file, Sander Niemeijer, 2004/12/13
- Re: adding specific C flags for a SINGLE source file, Sander Niemeijer, 2004/12/10
- Re: adding specific C flags for a SINGLE source file, Alexandre Duret-Lutz, 2004/12/10
- Re: adding specific C flags for a SINGLE source file, Sander Niemeijer, 2004/12/13
- Re: adding specific C flags for a SINGLE source file, Stepan Kasal, 2004/12/13
- Re: adding specific C flags for a SINGLE source file, Sander Niemeijer, 2004/12/13