help-make
[Top][All Lists]
Advanced

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

Re: proper (stylish) way for Makefile to determine top of source tree?


From: Jaap Fieret
Subject: Re: proper (stylish) way for Makefile to determine top of source tree?
Date: Fri, 1 Nov 2019 08:55:36 +0100

FREE

Jaap

> Op 31 okt. 2019 om 21:22 heeft Tim Murphy <address@hidden> het volgende 
> geschreven:
> 
> On Thu, 31 Oct 2019 at 16:36, Robert P. J. Day <address@hidden>
> wrote:
> 
>> 
>>  yet another style(?) question if i might ... current project source
>> has top-level structure:
>> 
>>  proj/
>>    Makefile
>>    config.include
>> 
>>  my basic question is, in a project with this structure, is it
>> considered proper workflow to have to "cd" into a subdir to build just
>> the component in that subdir? i would have thought the obvious
>> solution is to always make from the top, as in:
> 
> 
> 
> There are so many ways but that is quite a common approach (cd to subdir)
> and -C is lets you do that more conveniently.
> 
>  $ make -C uboot
>>  $ make -C kernel
>>  $ make -C rootfs
>> 
>> that way, you *always* know where you are.
>> 
>>  am i reasonable in suggesting that the current way using git is
>> really delicate and should be rewritten? thanks.
>> 
> 
> In general sub-components usually know where they are in the tree and
> therefore how many "../" to use in an include. If your system doesn't then
> it would be interesting to know why (I can imagine reasons but speculating
> is not very useful).
> 
> Looking for the enclosing .git is only fragile if there really is a
> use-case for building without git but that git command also seems
> unnecessary unless items shift up and down levels in the tree for some
> reason - a fixed reference seems adequate.
> 
> You can also use a variable like TOP_DIR or whatever you prefer and this
> means that however you determine it, it doesn't have to be hardcoded
> throughout the makefile and you can also set it on commandlines e.g.
> 
> make -C uboot TOP_DIR=..
> or
> make -C uboot TOP_DIR=$PWD
> 
> seems a little redundant.
> 
> Using a variable is more useful when locating the output - this is the
> thing that can change after all. e.g. you might want all objects to be
> created away from the source so that nobody is ever tempted to check them
> in.  You might be building 32 and 64 bit binaries or debug and release or
> various target architectures and your scheme might require that an output
> tree should have a structure that reflects these variations. In this case
> it's nice to write the makefiles to reference "$(OUT_DIR)/targetname" so
> that you don't have to hardcode targets for every possible variation.
> 
> Regards,
> 
> Tim




reply via email to

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