Re: Linking a program with a directory??

Magnus Therning <[email protected]> Fri, 23 Jul 2004 18:10:34 +0200
Newsgroups gmane.comp.tools.aap.user
Message-ID <[email protected]>
On Fri, Jul 23, 2004 at 01:06:43PM +0200, Bram Moolenaar wrote:
>
>Magnus Therning wrote:
>
>> I am feeling really stupid here, but I simply can't get it to work!
>> 
>> Files:
>> 
>>  foo.c
>>  foo.h
>>  main.c
>> 
>> main.aap:
>> 
>>  :dll foo : foo.c
>> 
>>  :program bar { add_LIBS = -lfoo } : main.c
>> 
>> Result:
>> 
>> Aap:  cc       -MM foo.c > build-Linux2_6_7_1_k7/foo.c.aap
>> Aap: cc    -O2  -fPIC -c -o build-Linux2_6_7_1_k7/foo.sho foo.c
>> Aap: ld  -shared -o libfoo.so build-Linux2_6_7_1_k7/foo.sho
>> Aap:  cc       -MM main.c > build-Linux2_6_7_1_k7/main.c.aap
>> Aap: cc    -O2  -c -o build-Linux2_6_7_1_k7/main.o main.c
>> Aap: cc  -O2 -o bar build-Linux2_6_7_1_k7/main.o -lfoo
>> /usr/bin/ld: cannot find -lfoo
>> collect2: ld returned 1 exit status
>> Aap: Error in recipe "/home/magnus/prog/tst/aap_03/main.aap" line 3: Error executing commands for build default: Error in recipe "/usr/lib/aap/default.aap" line 414: Shell command returned 1
>> 
>> I'd really like to get a '-L.' onto that last command, but how?
>
>Using add_LDFLAGS should work:
>
>    :program bar {add_LDFLAGS = -L. }{ add_LIBS = -lfoo } : main.c
>
>Putting -L. in add_LIBS will also work.  I'm not sure what is "cleaner".
>
>Another mechanism is to refer to the library directly instead of with
>"-l":
>
>    :program bar { add_LIBS = $(DLLPRE)foo$DLLSUF } : main.c
>
>That can also be used when the library is in another directory or
>produced by a child recipe.

That looks like an elegant way to me :-)

Of course I had to try out the hierarchical build as well. Again I got
stuck though :-(

 main.aap:

  :child foo/main.aap
  :child bar/main.aap

 foo/main.aap:

  :dll foo : foo.c

 bar/main.aap:

  :program { add_LIBS = $(DLLPRE)foo$(DLLSUF) }
      : main.c

What I am stuck on that main.c needs foo/foo.h to compile. So, I'd like
to add '-I../foo' when gcc compiles main.c. But I am at a loss!
add_INCLUDE, INCLUDE, add_CPPFLAGS, CPPFLAGS... neither has any effect.
How do I do it?

I have to say that the documentation seems to miss some really essential
parts here, doesn't it? A-A-P is a build tool, right? Why not have some
examples of what people do with build tools?

 - Linking to libraries, both in and outside of the build.
 - Hierarchical builds, with dependencies between targets in different
   directories (make is considered harmful because of its poor support
   for this, I hope AAP is better)

/M

-- 
Magnus Therning                    (OpenPGP: 0xAB4DFBA4)
[email protected]
http://magnus.therning.org/

Copyright today is a system inflicted on the public, not a system that
benfits the public.
     -- Richard Stallman
signature.asc (application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFBATh6iMWTaatN+6QRAqjaAKDRcUbRi/ZNe8crzYL0c5tcZraB3wCgqOgU
sZC8kvzqFE2nsErUrFtproE=
=P+uD
-----END PGP SIGNATURE-----