使用makefile文件作为规则的先决条件

问题描述 投票:0回答:1

我对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

这里可能是什么问题?有什么我想念的吗?

c makefile build
1个回答
2
投票

Makefile的依赖性是为了确保在更改Makefile后重新构建。例如,如果您更改CFLAGS中的Makefile或规则以进行编译或链接,则此依赖项将触发重新生成(所提供的目标文件应取决于Makefile)。如果不依赖Makefile,这些更改将不会导致重建。

规则最有可能执行$(filter-out Makefile,$^)。您需要将所有出现的Makefile替换为makefile

© www.soinside.com 2019 - 2024. All rights reserved.