Makefile recompiles after cleaning objects (but not the name target) -


when call clean rule make clean objects correctly deleted. if after call all rule make recompiles objects again, if target there.

as far know, should not recompile objects beacuse $(name) dependecy in all rule satisfied. indeed make clean erase object , not program target too.

somebody can explain me how avoid recompiling after make clean call? thank you.

here makefile:

name = myprogram  cc = clang++ cflags = -werror -wextra -wall -o3 -std=c++11  dir_srcs = srcs/ dir_objs = objs/ dir_incs = incs/  files = main.cpp \         file1.cpp \         files2.cpp \         file3.cpp \  objs = $(addprefix $(dir_objs), $(notdir $(addprefix $(dir_srcs), $(files:.cpp=.o))))  all: $(name)  $(name): $(objs)     $(cc) $(objs) $(cflags) -i$(dir_incs) -o $(name)  $(dir_objs)%.o: $(dir_srcs)%.cpp     mkdir -p $(dir_objs)     $(cc) $(cflags) -i$(dir_incs) -c $< -o $@  clean:     rm -rf $(dir_objs)  fclean: clean      rm -f $(name)  re: fclean  .phony: clean fclean re 

the $(name) dependecy in all rule not satisfied, because $(name) depends on $(objs) - , $(objs) not exist (after make clean). how make works. if dependencies don't exists or newer target - dependecies need regenerated (and in turn - target).

for example: program --> program.o --> (program.c, program.h)

if program.c or program.h newer program.o : program.o needs regenerated (updated). causes program.o newer program - program needs relinked (using program.o).


Comments

Popular posts from this blog

How has firefox/gecko HTML+CSS rendering changed in version 38? -

javascript - Complex json ng-repeat -

jquery - Cloning of rows and columns from the old table into the new with colSpan and rowSpan -