gpt4 book ai didi

c++ - Makefile 没有按照我告诉它的方式构建对象

转载 作者:行者123 更新时间:2023-11-30 00:43:56 25 4
gpt4 key购买 nike

这是我的项目目录文件树:

.
├── entity.cpp
├── entity.hpp
├── entitytypes.hpp
├── main.cpp
├── Makefile
├── player.cpp
└── player.hpp

Makefile的内容是这样的:

CC=g++
CFLAGS=-Wall -pg
LDFLAGS=-lsfml-graphics -lsfml-window -lsfml-system
EXE=gametest

all: $(EXE)

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

$(EXE): main.o entity.o player.o
g++ $^ -o $@ $(LDFLAGS)

奇怪的是,当我输入 make 时,输出是这样的:

g++    -c -o main.o main.cpp
g++ -c -o entity.o entity.cpp
g++ -c -o player.o player.cpp
g++ main.o entity.o player.o -o gametest -lsfml-graphics -lsfml-window -lsfml-system

如您所见,输出的最后一行对应于 Makefile 的 $(EXE) 部分。它将程序与正确的标志等链接起来。我的问题是,当构建每个单独的目标文件时,它根本没有考虑我的 %.o: %.c 规则。这很清楚,因为当它构建对象时,g++-c 之间有很长的差距,我没有写。此外,它还遗漏了我的 $(CFLAGS)。更奇怪的是,当我注释掉 %.o: %.c 部分时,Makefile 执行完全相同的操作。

在我看来它好像在使用某种默认的构建命令,只是忽略了我的命令。

我查看了我过去编写的 Makefile,据我所知,它们以相同的方式使用了完全相同的宏,所以我很困惑为什么会这样。

最佳答案

您将文件命名为 *.cpp,而您的规则是 *.c,这就是原因。

关于c++ - Makefile 没有按照我告诉它的方式构建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51633718/

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