automake
[Top][All Lists]
Advanced

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

Re: How to specify a library as dependecy to a executable


From: Stefano Lattarini
Subject: Re: How to specify a library as dependecy to a executable
Date: Fri, 16 Dec 2011 14:28:18 +0100
User-agent: KMail/1.13.7 (Linux/2.6.30-2-686; KDE/4.6.5; i686; ; )

On Friday 16 December 2011, ittium  wrote:
>
> thanks Stefano, I think, I could not explain the issue clearly.
>
No, you did explain yourself quite clearly and correctly, but I have
probably been too much terse in my answer.  Let's see whether I've done
better this time ...

> I have a
> build system which build libraries followed by some binaries (libraries and
> binaries reside in different directories), these binaries link with
> libraries earlier built. If I change some source file in library, library
> will be recompiled. What I want is when make file for executable find out
> some library has changed, It should relink automatically on calling make.
>
I had understood your use case quite correctly then.

> bin_PROGRAMS=fooclient fooserver
> fooclient_SOURCES=source/foo_client_main.cpp
> fooserver_SOURCES=source/foo_server_main.cpp
> INCLUDES=-I./include

Question: what is the expected value of $(ROOT_DIR) below? 

> fooclient_LDADD=-L$(ROOT_DIR)/protocol_handlers/net_handler
> fooserver_LDADD=-L$(ROOT_DIR)/protocol_handlers/net_handler
>
Ah-ah, you are using `-L' in fooserver_LDADD.  This might be what is
causing your problem.  In fact, the documentation I had linked in my
previous reply reads:

  prog_LDADD is inappropriate for passing program-specific linker
  flags (except for -l, -L, -dlopen and -dlpreopen). So, use the
  prog_LDFLAGS variable for this purpose.

> In above case if any of the library mentioned in LDADD
> (here libnet_handler.a) change, I want automatic relinking of
> binaries assuming source files for binary have not changed
>
Try to use this:

   fooclient_LDADD = $(ROOT_DIR)/protocol_handlers/libnet_handler.a
   fooserver_LDADD = $(ROOT_DIR)/protocol_handlers/libnet_handler.a

Then the relinking you want to see should happen automatically (and
this should work even if $(ROOT_DIR) is defined at configure time
rather than at automake time, BTW).  If this doesn't happen, than I
have misunderstood something, or you have found a bug in automake;
in any case, let me know, and we'll try to work out the problem.

Regards,
  Stefano



reply via email to

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