Makefile: One last adjustment to relative paths
Subsystems (2)
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.
--- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
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)'" $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ KBUILD_SRC=$(CURDIR) \ KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
Signature · 1 line
1.9.3
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]>Signed-off-by Boaz Harrosh <[email protected]>--- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Makefile +0
-0
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
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