使用指定Makefile编译时,如何将gcc替换为tcc?
替换Makefile默认编译器为tcc的修改要点
针对你提供的dwl的Makefile,替换gcc为tcc需要修改以下几个关键部分:
1. 确保CC变量指向tcc
Makefile开头包含了config.mk,优先检查这个文件里的CC设置——如果config.mk里定义了CC = gcc,直接改成CC = tcc即可。如果不想修改config.mk,可以在Makefile的include config.mk之后添加一行:
CC = tcc
这样会覆盖config.mk里的默认编译器设置。
2. 移除tcc不支持的gcc专属警告标志
tcc对部分gcc特有的编译警告选项不兼容,需要从DWLDEVCFLAGS中删除这些选项,否则编译会报错。修改后的DWLDEVCFLAGS可以是:
DWLDEVCFLAGS = -pedantic -Wall -Wextra -Wno-unused-parameter -Wshadow \ -Werror=implicit -Werror=return-type -Werror=incompatible-pointer-types
移除的选项包括:-Wdeclaration-after-statement、-Wno-sign-compare、-Wunused-macros、-Werror=strict-prototypes——这些都是tcc不支持的警告/错误标志。
3. 明确指定C标准(可选但推荐)
tcc默认的C标准可能较低,为了匹配原代码的编译要求,建议在CFLAGS中添加C标准声明,比如在config.mk或者Makefile里设置:
CFLAGS += -std=c99
确保代码能以正确的C标准编译。
4. 调整链接命令的参数顺序
tcc对链接参数的顺序要求更严格,原链接命令把库文件放在目标文件之前,可能导致未定义符号的错误。修改dwl目标的链接规则为:
dwl: dwl.o util.o $(CC) $(LDFLAGS) $(DWLCFLAGS) dwl.o util.o $(LDLIBS) -o $@
将$(LDLIBS)移到目标文件之后,符合链接器的参数顺序规范。
完成以上修改后,就可以用tcc正常编译dwl了。
内容的提问来源于stack exchange,提问作者daswer
相关产品推荐
相关产品推荐

