首页 > 解决方案 > Makefile 没有按照我的说法构建对象

问题描述

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

.
├── 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

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

在我看来,它似乎在使用某种默认的构建命令,而忽略了我的。

我查看了我过去编写的 Makefile,据我所知,它们以相同的方式使用完全相同的宏,所以我对为什么会发生这种情况感到非常困惑。

标签: c++makefile

解决方案


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


推荐阅读