我是makefiles等的新手。
该文件如下所示:
COMPILER_NAME = gcc
COMPILER_FLAGS =
PATH_OBJECTS = ./obj
PATH_SOURCES = ./src
$(PATH_OBJECTS)/%.o: $(PATH_SOURCES)/%.c
$(info Generating object files...)
@$(COMPILER_NAME) $(COMPILER_FLAGS) -c $< -o $@
cleanup: $(PATH_OBJECTS)/%.o
$(info Final cleanup...)
@rm -rf $<
当我尝试实际制作项目时,我收到此错误: make:***没有规定制作目标&#39; obj /%。o&#39;,需要清理&#39;。停止。
就像%通配符未正确评估一样。请帮帮我。
答案 0 :(得分:2)
模式规则有&#39;%&#39;在目标中,可能在一个或多个先决条件中。你有什么:
cleanup: $(PATH_OBJECTS)/%.o
...
不是模式规则,而且&#39;%&#39;不是通配符,它只是一个角色。这是一个普通的规则,它会查找名为&#34; ./ obj /%&#34; 的文件作为先决条件,并且没有此类文件。
如果您希望cleanup
删除该目录中的所有目标文件,则无需任何此类复杂功能。就这样做:
cleanup:
@echo Final cleanup...
@rm -rf $(PATH_OBJECTS)/*.o
请注意,这使用shell命令echo
,而不是Make命令info
,以及shell通配符&#39; *&#39;,而不是Make通配符&#39;%& #39;
如果您希望目标依赖于您可以构建的所有目标文件,则必须自己构建该列表;它并不难,但它看起来不像你需要的东西。