[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Automake/Libtool: Compiling the same source as C and C++

From: Ralf Wildenhues
Subject: Re: Automake/Libtool: Compiling the same source as C and C++
Date: Wed, 22 Sep 2010 20:59:49 +0200
User-agent: Mutt/1.5.20 (2010-08-04)

Hello Hugh,

* Hugh Dickinson wrote on Wed, Sep 22, 2010 at 04:50:33PM CEST:
> I am trying to convert an existing software package to build using the
> GNU autotools. The source code contains several files with .c and .cc
> which are designed to be compiled both as C and C++ regardless of
> their suffix (i.e. they contain conditionally compiled code #ifdef
> _cplusplus preprocessor directives). Unfortunately it seems like
> automake hard-codes the libtool "--tag" value directly into the
> based on the file suffix.

Indeed, automake assumes .c files are for the C compiler, and C++ files
are for the C++ compiler.  It is probably not worth trying to fight
this, as you will run into more issues later with libtool.

There are a couple of hacks I can think of to get up to speed without
creating full-fledged copies of each file:

1) For each foo.c file, create a file consisting of
  #include "foo.c"

You can even do this automatically from a make rule *if* you always go
from .c to .cc, or always the other way, but never have to go both ways
within a single  Example:

bin_PROGRAMS = cee ceepp
cee_SOURCES = foo.c bar.c
nodist_ceepp_SOURCES = $(
CLEANFILES = $(nodist_ceepp_SOURCES)
        source=`echo $< | sed 's,.*/,,'`; \
        echo '#include "'$$source.c'"' > $@

2) Alternatively, use symlinks if possible.  Same as above, only
        rm -f $@
        $(LN_S) $< $@

(be sure to still use nodist_*, otherwise you run into portability
issues both for symlinks on w32, and for VPATH target issues on other
systems with GNU make).  Be sure AC_PROG_LN_S is in
If your sources files have nontrivial dirname components, this rule
needs to be quite a bit more elaborate, though.

3) If you really must compile .c files with $(CXX) or .cc with $(CC)
then report back.  I probably eventually need to look into this anyway
for the GCC source tree, but it's more tricky than it looks at first.

Hope that helps.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]