c - 我在 c 中创建了一个 Makefile,它应该创建多个可执行文件,但它不起作用
问题描述
我需要做什么
我正在尝试在 c 中创建一个 Makefile,它应该从三个不同的 .c 文件创建三个可执行文件。我想创建 Lez4Es1、Lez4Es1v2 和 Lez4Es3 作为我在两个不同阶段编译和链接的可执行文件。比如:
gcc -std=c99 -Wall -pedantic Lez4Es1.c -c
gcc -std=c99 -Wall -pedantic Lez4Es1.o -o Lez4Es1
gcc -std=c99 -Wall -pedantic Lez4Es1v2.c -c
gcc -std=c99 -Wall -pedantic Lez4Es1.v2 -o Lez4Es1v2
gcc -std=c99 -Wall -pedantic Lez4Es3.c -c
gcc -std=c99 -Wall -pedantic Lez4Es3.o -o Lez4Es3
我的解决方案
假设所有 .c 文件都在同一个目录中,我创建了这个 Makefile 但它不起作用:
CC = gcc
CFLAGS += -std=c99 -Wall -pedantic -g
TARGETS = Lez4Es1 \
Lez4Es1v2 \
Lez4Es3 \
.PHONY: all clean cleanall
% : %.o
$(CC) $(CFLAGS) $^ -o $@
%.o : %.c
$(CC) $(CFLAGS) -c $^
all : $(TARGETS)
clean :
-rm *.o *~ core
cleanall :
-rm *.o *.txt -f $(TARGETS) *~ core
问题
当我运行 $ make 它从 .c 文件而不是从 .o 创建可执行文件时,这是编译器的输出:
$ make
gcc -std=c99 -Wall -pedantic -g Lez4Es1.c -o Lez4Es1
gcc -std=c99 -Wall -pedantic -g Lez4Es1v2.c -o Lez4Es1v2
gcc -std=c99 -Wall -pedantic -g Lez4Es3.c -o Lez4Es3
如何解决让他做我想做的事情?有一种方法可以给可执行文件一个不同于 .o 文件的名称吗?
抱歉我的英语不好,如果我没有很好地解释它,我准备编辑它并给你更多细节,谢谢。
解决方案
尝试删除从源文件创建可执行文件的内置规则:
% : %.c
(没有配方的模式规则会取消该规则)。
推荐阅读
- python-3.x - 无法在同一个套接字中创建新变量并作为 udp 发送
- android - 将发布 APK 上传到 Play 商店时不支持 SHA-1 密钥
- java - Java 实例
- java - 2 个配置文件,2 个方法实现,1 个通过 Thymeleaf 调用 html 文件。如何?
- c# - vstest with TFS build: System.Runtime.Remoting.RemotingException: 'Object '/XXX.rem' has been disconnected or not exist at server
- jvm - Google caliper -XX:CICompilerCount=2 vmOption 不适用
- javascript - Youtube 视频未播放:解析标头 X-XSS-Protection 时出错
- node.js - 触发函数内的所有变量获取值后的实时数据库触发
- apache-spark - .withColumn 不提供数据框的原始列,而只提供新添加的列
- angular - submitEl.triggerEventHandler 不是 Angular 5 中的函数