gpt4 book ai didi

c - 我究竟该如何使用 makefile?

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

我现在真的很困惑。

所以我有 5 个文件:main.c、flight.c、flight.h、passenger.c 和 passenger.h

flight.h 有flight.c 的函数原型(prototype),passenger.h 有passenger.c 的函数原型(prototype)

flight.c 和 passenger.c 有这些函数的定义。

main.c 是我将与之交互的程序,从两个 .c 文件调用函数

我不太确定 .o 文件的用途,有人愿意解释一下吗?这是我的 Makefile:

flight.o: flight.c flight.h
gcc -Wall -g -c flight.c
passenger.o: passenger.c passenger.o
gcc -Wall -g -c passenger.c
main.o: main.c
gcc -Wall -g -c main.c
reservations.out: main.o flight.o passenger.o
gcc -Wall -g flight.o passenger.o main.o -o reservations.out

编辑:然后我使用命令“make Makefile”,并得到一个错误:make: Nothing to be done for `Makefile'。

在我的文件中,gcc 之前有一个选项卡。我很感激任何帮助,我确信我做错了很多事情。谢谢。

最佳答案

您的问题是您使用了错误的命令。我会将以下行添加到您的 makefile 的顶部:

all: reservations.out

然后只需在命令行输入make。如果您不想编辑该文件,只需使用 make reservations.out 即可获得正确的行为。

至于什么是.o 文件:它是一个“对象”文件,意味着它包含已编译(但在本例中未链接)的代码。您的最终 makefile 规则采用目标文件并将它们链接在一起成为一个名为 reservations.out 的最终可执行文件。

现在我进一步查看了它,看起来您在最终规则中有一些奇怪的行为。我认为它应该更像:

reservations.out: main.o flight.o passenger.o
gcc -Wall -g main.o flight.o passenger.o -o reservations.out

此外,您有 passenger.o 作为 passenger.o 的先决条件,这肯定会给您带来麻烦。我会做的是这样的(它可能更严格,但我试图让它变得简单):

.PHONY: all clean

all: reservations.out

flight.o: flight.c flight.h
gcc -Wall -g -c flight.c

passenger.o: passenger.c passenger.h
gcc -Wall -g -c passenger.c

main.o: main.c
gcc -Wall -g -c main.c

reservations.out: main.o flight.o passenger.o
gcc -Wall -g main.o flight.o passenger.o -o reservations.out

clean:
rm -f *.o reservations.out

但如果您想了解更多细节,我真正会做的是下面的内容。对于这样一个小项目来说,这可能有点矫枉过正,但它也更容易根据需要进行调整和摆弄。

.PHONY: all clean

BIN = reservations
OBJ = flight.o passenger.o main.o

all: $(BIN)

%.o: %.c %.h
gcc -Wall -g -c $<

main.o: main.c
gcc -Wall -g -c $<

$(BIN): $(OBJ)
gcc -Wall -g -o $@ $^

clean:
rm -f $(OBJ) $(BIN)

我建议查看 GNU make manual详细了解您可以做的所有有趣的事情。

关于c - 我究竟该如何使用 makefile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1838040/

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