gpt4 book ai didi

c - 当有多个文件时如何运行 C 程序?

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:25 26 4
gpt4 key购买 nike

在一个程序中,我有一个list.c 文件、list.h 文件和run.c 文件。在 run.c 文件中,代码包含我的主程序以及“#include list.h”。在我的 list.h 文件中,我的函数只是无效的并且正在定义中。最后,在我的 list.c 文件中,我再次包含 list.h 并且我知道每个函数将要做什么的含义和代码。我制作了一个看起来像这样的 makefile:

SOURCES = run.c list.c
OBJECTS= run.o list.o
HEADERS = list.h
CC = gcc
CFLAGS = -g -Wall

lab1: $(OBJECTS)
(tab) $(CC) $(CFLAGS) $(OBJECTS) -o lab1

clean:
(tab) rm -fR *o lab1

我的代码没有任何问题,因为它已经完成,我只是在复制代码。但是,我不确定如何使用 makefile 来运行这些多个文件。我只是在用 gcc 编译并使用“./”后才熟悉运行器文件。我的 makefile 是否有问题,或者是否有以不同方式编译这些文件的步骤?

谢谢你的帮助

最佳答案

给定的 makefile 正在运行并生成可执行的 lab1 文件。但是,.o 文件依赖于 list.h 文件,而这种依赖性没有被捕获。

您应该指定构建 .o 文件的目标,如下所示:

SOURCES = run.c list.c
OBJECTS= run.o list.o
HEADERS = list.h
CC = gcc
CFLAGS = -g -Wall

lab1: $(OBJECTS)
(tab) $(CC) $(CFLAGS) $(OBJECTS) -o lab1

%.o: %.c $(HEADERS)
$(CC) -c $(CFLAGS) $< -o $@

clean:
rm -fR *o lab1

警告:使用此 makefile,如果 HEADERS 列表增长,任何 header 中的更改将保证重建所有 .o 文件。

例如,假设我们还有使用 buf.hbuf.c。现在 HEADERS = list.h buf.h。如果我们更改 buf.h,我们的 makefile 将重建 list.obuf.o,即使 buf.o 重建就足够了。

为了解决这个问题,我们可以使用更详细的 makefile,它使用如下规则为每个 .o 文件标识特定的头先决条件:

list.o: list.c list.h
$(CC) -c $(CFLAGS) $< -o $@

buf.o: buf.c buf.h
$(CC) -c $(CFLAGS) $< -o $@

关于c - 当有多个文件时如何运行 C 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com