From: Adam Dunkels (adam_at_sics.se)
Date: 2001-12-10 19:11:16
On Monday 10 December 2001 16:54, you wrote:
> a) regardless whats the current working dir when i type "make", the
> stuff should still work => this renders "searching relative to ."
> useless.
Being able to type "make" in an arbitrary directory and hope to rebuild the
right files for the right just doesn't work. If you use GNU make, you can
specify a working directory, however, with "gmake -C /adam/project". Perhaps
this is the closest thing to your needs?
> whatever, all and all these problems can be easily solved by
> "searching relative to current file" aswell (right after searching
> pathes given by -I option at best) - and thats actually the kind of
> behaviour i'd expect from any decent compiler/assembler out there.
> (except borland turbo-c which suffers from the same problem hehehehe ;D)
>
> infact, i was pretty surprised that ca65 did NOT work like this when i
> first stumbled about it....seems to be another "too easy to let it be
> unfixed" issue to me ;=)
I think that the behavour that ca65/cc65 exhibits is the more common
behaviour. I haven't come across any compilers that lets you specify "include
file relative to where this file lives" (but then I haven't come across very
many compilers). The common behaviour is that #include files are searched
relative to all -I paths and some default paths (., /usr/include and friends
as well as a few others).
Anyway, here is how I solved the problem for the lwIP project. The lwIP
TCP/IP stack should compile cleanly for many platforms and it should possible
to compile it with either IPv4 or IPv6 support. The code tree is structured
in such a way that all makefiles and .o files end up in an project-specific
directory (called proj/${PROJNAME}) and the source and includefiles are kept
in another directory (src/).
All include files are #included with an lwip/ path, like this:
#include "lwip/ip.h"
#include "lwip/debug.h"
(The reason is to avoid clobbering the namespace.)
The are a few different types of include files; those that are lwIP specific,
those that are architecture specific and those that are project specific.
Each are kept in diffrent directories. The makefiles are used to specify the
#include paths with the CFLAGS variable like this:
CFLAGS = -I../src/include -I../src/arch/cc65/include -I../src/include/ipv4
This way, all includes are kept in diffrent directories and the paths are
relative to the makefile and not to the root of the filesystem.
/adam
--
Adam Dunkels <adam_at_sics.se>
http://www.sics.se/~adam
----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2001-12-14 22:05:44 CET