Discussion:
Automake passing CFLAGS or CXXFLAGS when linking
Grégory Pakosz
2016-06-28 17:21:45 UTC
Permalink
Hello,

What's the rationale behind Automake passing CFLAGS or CXXFLAGS when linking?

LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@

CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@

In comparison, GNU Make's default linking rule is

.o:
$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@

where LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)

Regards,
Gregory
Mike Miller
2016-07-01 01:13:17 UTC
Permalink
Post by Grégory Pakosz
Hello,
What's the rationale behind Automake passing CFLAGS or CXXFLAGS when linking?
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
In comparison, GNU Make's default linking rule is
where LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
I don't know if I can tell you an offical project rationale, but I can
give a couple examples of options that you really do want to appear in
both places, -pthread and -fopenmp.

If automake did not invoke the link stage this way, building with
CFLAGS=-fopenmp but forgetting to include it in LDFLAGS might cause
serious problems.

OTOH asking the compiler to link some object code and including a few
options that have nothing to do with linking should be harmless.
--
mike
Bob Friesenhahn
2016-07-01 13:33:44 UTC
Permalink
Post by Grégory Pakosz
Hello,
What's the rationale behind Automake passing CFLAGS or CXXFLAGS when linking?
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
Notice that these lines all start with $(LIBTOOL). Libtool will
normally discard flags not needed for linking. It is common for
libtool to link using the C compiler when possible and so the C
compiler can also use/discard options as needed.

Bob
--
Bob Friesenhahn
***@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer, http://www.GraphicsMagick.org/
Grégory Pakosz
2016-07-02 07:05:02 UTC
Permalink
Thanks for the reply Bob.

Well I indeed copy pasted from a Libtoolized project (by mistake) but
first I noticed CFLAGS and CXXFLAGS where used when linking in a plain
Automake project:

LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@

CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@

Also, as far as I can tell, Libtool filters flag only when linking
shared libraries.

Gregory

On Fri, Jul 1, 2016 at 3:33 PM, Bob Friesenhahn
Post by Grégory Pakosz
Hello,
What's the rationale behind Automake passing CFLAGS or CXXFLAGS when linking?
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
Notice that these lines all start with $(LIBTOOL). Libtool will normally
discard flags not needed for linking. It is common for libtool to link
using the C compiler when possible and so the C compiler can also
use/discard options as needed.
Bob
--
Bob Friesenhahn
GraphicsMagick Maintainer, http://www.GraphicsMagick.org/
Grégory Pakosz
2016-07-19 13:22:43 UTC
Permalink
For those landing on this thread, here is the commit that introduces
the behavior

commit dbf75997a9c86dcf92e94aeba6d1e5ffa1b0799c
Author: Tom Tromey <***@redhat.com>
Date: Thu May 1 01:18:21 1997 +0000

some patches from ian
put var index into final index
put CFLAGS into LINK

Gregory
Post by Grégory Pakosz
Thanks for the reply Bob.
Well I indeed copy pasted from a Libtoolized project (by mistake) but
first I noticed CFLAGS and CXXFLAGS where used when linking in a plain
Also, as far as I can tell, Libtool filters flag only when linking
shared libraries.
Gregory
On Fri, Jul 1, 2016 at 3:33 PM, Bob Friesenhahn
Post by Grégory Pakosz
Hello,
What's the rationale behind Automake passing CFLAGS or CXXFLAGS when linking?
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
Notice that these lines all start with $(LIBTOOL). Libtool will normally
discard flags not needed for linking. It is common for libtool to link
using the C compiler when possible and so the C compiler can also
use/discard options as needed.
Bob
--
Bob Friesenhahn
GraphicsMagick Maintainer, http://www.GraphicsMagick.org/
Loading...