我对make缺乏经验,并希望复制某些第三方SDK提供的构建结构,并将其调整为适合我自己的编译器和项目。
事实是,我发现使用makefile作为先决条件生成了一些规则,例如:
...
$(eval $(1): Makefile | $(dir $(1)).) \
...
或
$(OUTPUT_DIRECTORY)/%.inc: Makefile | $(OUTPUT_DIRECTORY)
$(info Generating $@)
$(NO_ECHO)$(call dump, $(call target_specific, INC_PATHS, $*)) > $@
最初,他们的makefile是大写的(Makefile),而我正在处理的是小写的(makefile)。无论如何,当我尝试当前更改时,会出现此错误:
*** No rule to make target 'Makefile', needed by '...'
我以为这是由于大写,所以在两个地方都更改为小写,然后再次尝试,但是这次错误是将makefile视为C文件(这是我的猜测...)
"makefile", line 1: error #171: expected a declaration
-include makefile.local
^
"makefile", line 67: error #8: missing closing quote
${CG_TOOL_ROOT}/include"
^
"makefile", line 99: error #10: "#" not expected here
.SUFFIXES: # ignore built-in rules
^
"makefile", line 100: error #10: "#" not expected here
%.d: # don't try to make .d files
^
"makefile", line 100: error #8: missing closing quote
%.d: # don't try to make .d files
这里可能是什么问题?有什么我想念的吗?
对Makefile
的依赖性是为了确保在更改Makefile
后重新构建。例如,如果您更改CFLAGS
中的Makefile
或规则以进行编译或链接,则此依赖项将触发重新生成(所提供的目标文件应取决于Makefile
)。如果不依赖Makefile
,这些更改将不会导致重建。
规则最有可能执行$(filter-out Makefile,$^)
。您需要将所有出现的Makefile
替换为makefile
。