Skip to contentSkip to conversation

Makefile: One last adjustment to relative paths

PATCH In review Boaz Harrosh 2 participants 3 messages Aug 25, 2014 – Aug 26, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Makefile: One last adjustment to relative paths

From: Boaz Harrosh <[email protected]>

I have one last problem when compiling under an IDE. This time it is when I compile linux under another Makefile with the use of
make -C linux

The make command is run from /home/boaz/dev/
What the IDE will see is:
make[1]: Entering directory `/home/boaz/dev/linux-open-osd'

This one is from the external make dev/Makefile

make[1]: Entering directory `.build_um'

^ This one is emulated by Linux Makefile
...

make[1]: Entering directory `.build_um'

^ This one is emulated by Linux Makefile again
error: ../foo/baz.c:XXX

       ...

The IDE will look for ../foo/baz.c at

	/home/boaz/dev/.build_um/../foo/baz.c ==
	/home/boaz/dev/foo/baz.c

This is because make will always print its "Entering directory" full path or relative to the original make command, this is make -C rules.

the simple fix is to have "Entering directory" print full path.

[Stable needed for 3.16]
CC Stable Tree <[email protected]>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Makefile +1 -1
index 6b27741..973c48f 100644
@@ -178,7 +178,7 @@ $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
  quiet_echodir := @echo
 silent_echodir := @:
 sub-make: FORCE
-	$($(quiet)echodir) "make[1]: Entering directory \`$(KBUILD_OUTPUT)'"
+	$($(quiet)echodir) "make[1]: Entering directory \`$(CURDIR)/$(KBUILD_OUTPUT)'"
 	$(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
 	KBUILD_SRC=$(CURDIR) \
 	KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
Signature · 1 line
1.9.3
#1 lore raw
Quoted 14 lines · Boaz Harrosh

the simple fix is to have "Entering directory" print full path.

[Stable needed for 3.16]
CC Stable Tree <[email protected]>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Makefile +0 -0
index 6b27741..973c48f 100644

Makefile $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make · line 181

Quoted 5 lines
Makefile +1 -1
@@ -178,7 +178,7 @@ $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
  quiet_echodir := @echo
 silent_echodir := @:
 sub-make: FORCE
-	$($(quiet)echodir) "make[1]: Entering directory \`$(KBUILD_OUTPUT)'"
+	$($(quiet)echodir) "make[1]: Entering directory \`$(CURDIR)/$(KBUILD_OUTPUT)'"

KBUILD_OUTPUT is converted to an absolute path a few lines earlier:

KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
								&& /bin/pwd)

So I don't understand why are you getting a message with a relative path. I get an absolute path as expected here:

$ mkdir aaa
$ make O=aaa defconfig
make[1]: Entering directory `/home/mmarek/linux-2.6/aaa'
...

Michal

#2 lore raw
Quoted 6 lines · Michal Marek

So I don't understand why are you getting a message with a relative path. I get an absolute path as expected here:

$ mkdir aaa
$ make O=aaa defconfig
make[1]: Entering directory `/home/mmarek/linux-2.6/aaa'

OK that was an operator error. You are absolutely right

What happened is that my makefile was using
make KBUILD_OUTPUT=.build_um -C linux
and not
make O=.build_um -C linux

This was done at the time because when building out-of-tree modules (I Have some test modules that I build in my project) You must use KBUILD_OUTPUT= because O= is used by the external module build system.

But reverting to use the O= as it should be all is well and it works as you say

Sorry for the noise
Boaz