Including another Makefile results in a failed build, why? -
problem
including external makefile makes stable build fail following error :
make: *** no rule make target 'build/main.o', needed 'all'. stop.
context
the context manage build of each of projects 1 makefile per project. since projects makefiles have lot of redundancy, want put common things in external makefile included in each project's makefile.
minimal example reproduce issue
in simple , minimalist example try build srcs/main.c build/main.o , try display inside variable foo
in tools.mk
:
folder structure :
| makefile | +---build | (main.o) +---mkf | tools.mk | \---srcs main.c
content of makefile :
include ./mkf/tools.mk mkfile_path :=$(realpath $(lastword $(makefile_list))) current_dir :=$(dir $(mkfile_path)) vpath = $(current_dir)/srcs ./build/%.o: %.c @echo $< $@ gcc $< -o $@ all: ./build/main.o test @echo done ! test: @echo testing include : $(foo) .phony: test
content of tools.mk :
foo = 42
content of main.c (basic hello world) :
# include <stdio.h> # include <stdlib.h> int main(void) { printf("hello, world!"); return exit_success; } /*main*/
now problem if place myself in root folder , type make all
, build fail error mentioned above. if comment line include ./mkf/tools.mk
build succeeds. guess fails because of include line, cannot figure out why.
can enlighten me on ?
the build performed gnu make 4.2
on windows 7 64-bits
.
in
mkfile_path :=$(realpath $(lastword $(makefile_list)))
that yields path of last included makefile, ./mkf/tools.mk
. see other special variables details.
a fix:
mkfile_path :=$(realpath $(lastword $(makefile_list))) current_dir :=$(dir $(mkfile_path)) include ./mkf/tools.mk
Comments
Post a Comment