我可以在生成文件中为 CC、CFLAGS 使用其他名称,或者将它们硬连接到 GNU make 中
Can I use other names for CC, CFLAGS in a makefile or they are hard wired into GNU make?
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在一定程度上遵守了这些。不过,您可以完全忽略任何内置内容,并使用自己的显式规则和变量。
相关文章:
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 地图计数确实很重要,或者只是检查是否存在
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- make 命令如何避免重新编译未更改的源文件?
- 为什么文件不是由 F 流创建的,或者即使它是输出只是垃圾值?
- MAKE:找不到包含的用户定义的头文件?
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- 'make check' GLIBC 运行时的链接问题
- 如何仅使用一次固定<<设置精度(2)?或者至少恢复到默认行为?
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- GoogleTest 在使用 libgtest_main.a 时给出多个主定义,或者在不使用 libgtest_main
- 使用unique_ptr并返回引用,或者我应该使用shared_ptr并在需要时制作副本
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- mingw32-make 使用"MinGW Makefiles"生成器跟踪 CMAKE 无法将可执行文件链接到对象库
- C++类:virtual和override,或者两者都没有
- 二进制 '==':未找到采用 'Enemy' 类型左侧操作数的运算符(或者没有可接受的转换)
- 我可以在生成文件中为 CC、CFLAGS 使用其他名称,或者将它们硬连接到 GNU make 中