[Geany-Users] Makefile redirction for Make Command

Tim Black tblack at xxxxx
Wed Jan 22 12:19:20 UTC 2014


Hi thanks for getting back to me.

Maybe I should have been a little more specific in my requirements:

My folder structure looks like:

/APPS
        /application1
                /src
        /application2
                /src    <- geany pointing to file here !  See note below
        /application3
                /src

... 20 or so applications ...

/buid1
        /application1
                /src
        /application2
                /src    <- I want geany to execute the Makefile here
        /application3
                /src

... 20 or so applications ...

If I put a makefile (e.g. Makefile.geany) in /APPS/application2/src that points to the makefile in /build1/application2/src then regardless of which directory the file I am editing is the Make command will pick up the Makefile.geany and build application2.  Obviously each Makefile.geany file would need to be customised to execute the correct target.

My question is:

What would I put in the Makefile.geany to run make in ../../build1/application/src or would a shell script (geany.make) be more sensible that simply executed e.g. pushd ../../build1/application/src; make; popd;  Every directory would have the geany.make script so I can simply have to put geany.make in the command settings.

Your comments on the best course of action would be appreciated.

Thanks again

Tim

-----Original Message-----
From: users-bounces at lists.geany.org [mailto:users-bounces at lists.geany.org] On Behalf Of Chow Loong Jin
Sent: 22 January 2014 08:54
To: Geany general discussion list
Subject: Re: [Geany-Users] Makefile redirction for Make Command

On Wed, Jan 22, 2014 at 08:24:36AM +0000, Tim Black wrote:
> Hello
>
> In the Manual there is talk of Makefile redirection that is used for "out of tree" compilation.
>
> I am using Geany and have recently migrated a project that uses an
> Automake VPATH build(s) and now my apps will not build without the use
> of this Makefile redirection.

Out-of-tree compilation with autotools is usually fairly straightforward -- just cd into your build tree, and call configure from there, e.g.

To build:
$ mkdir -p build-tree
$ cd build-tree
$ ../configure
$ make

And to clean:
$ cd .. && rm -rf build-tree

With an autotools project, the autoconf/automake files (configure.ac, Makefile.am, Makefile.in) are in the source tree, whereas your Makefile, and a couple of other auxiliary files, are in your build tree.

> Has anyone got an example of this Makefile redirection. Basically I
> need to fire off the makefile that now exists in my build tree. I have
> two versions of build tree that have different targets and use
> different versions of gcc so it would also be good to pass an argument that would select one of the targets.

TL;DR:
Simply put, don't use VPATH directly. In your Makefile.am, use $(srcdir) to refer to the directory, and $(builddir) to refer to the build directory.
$(top_srcdir) and $(top_builddir) refer to the root of your source tree and build tree respectively.

In an in-tree build, $(srcdir) == $(builddir) and
$(top_srcdir) == $(top_builddir).

In an out-of-tree build, $(srcdir) != $(builddir) and
$(top_srcdir) != $(top_builddir). Your binaries go into $(builddir), while your sources remain in $(srcdir).

During `make distcheck`, one of the tests done is to make the entire $(srcdir) read-only, and to do the entire build in a separate directory using this feature. So, any files generated by your build (from ./configure onwards) should not modify anything in your source tree.


Explanation on VPATH:
VPATH is a Make feature that affects the lookup of the dependencies, but not the target. When using VPATH, your target is relative to your current directory, whereas your dependencies are looked up in ., and failing which, in VPATH.
However, make does not know how to mangle your rules, so...

This is correct:
| foobar.o: foobar.c
|       $(CC) -c $< -o $@

If VPATH=../src, then this automatically expands to:
$ cc -c ../src/foobar.c -o foobar

This is wrong:
| foobar.o: foobar.c
|       $(CC) -c foobar.c -o foobar

Because this expands (regardless of VPATH) to:
$ cc -c foobar.c -o foobar

--
Kind regards,
Loong Jin
Important: This e-mail is intended for the above named only. It may contain private or confidential information, protected by copyright. If this has been received in error, it should be destroyed or the sender notified. It should not be used except by the intended recipient. The views contained in this email are those of the author and not necessarily those of Actia (UK) Ltd.

It is for the recipient to undertake any virus checking and no liability therefore is accepted by the sender.

Actia (UK) Ltd
Registered Office: Unit 81 Mochdre Industrial Estate,
Newtown, Powys. SY16 4LE.
Company Reg. No: 2910867




More information about the Users mailing list