我可以在生成文件中为 CC、CFLAGS 使用其他名称,或者将它们硬连接到 GNU make 中

Can I use other names for CC, CFLAGS in a makefile or they are hard wired into GNU make?

本文关键字:或者 make GNU 连接 其他 文件 CC CFLAGS 我可以      更新时间:2023-10-16
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(SOURCES) $(EXECUTABLE)

我可以使用 COMPILER 代替 CC,或 OBJ 代替 OBJECTS 吗?make工具会识别它们吗——这只是我这边的纯粹惯例吗?

内置规则使用诸如${CC}(或$(CC) - 表示法是等效的)之类的名称。如果选择使用不同的宏名称,则必须覆盖/重写规则以使用您的名称:

%: %.c
    ${COMPILER} -o $@ ${OBJ} ...

如果你是明确的,就不会有问题:

hello: ${OBJS}
    ${COMPILER} -o $@ ${OBJS}

但请注意,使用备用名称可能会使人们更难理解您的生成文件。 生成文件可能会变得复杂;降低其复杂性的一种方法是遵循正常的约定。 我不是特别建议按照你的建议去做,但这是可以做到的。

CC 和 CFLAG 由隐式规则使用,但不用于 OBJECT:(见 http://www.gnu.org/software/make/manual/html_node/Implicit-Rules.html#Implicit-Rules)

可以更改 OBJECT,因为它不属于任何显式规则。

如果你想为显式规则中使用的变量使用其他名称,我认为你必须通过在 Makefile 中添加类似的东西来定义自己的规则:

.cpp.o:
    $(COMPILER) $(COMPILATIONFLAGS) $< -o $@

默认规则中的命令和其中使用的变量名称由 POSIX 标准化。GNU在一定程度上遵守了这些。不过,您可以完全忽略任何内置内容,并使用自己的显式规则和变量。

相关文章: