这是我的项目目录文件树:
.
├── 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++
和之间没有很长的间隔-c
,我没有写过。另外,它也丢失了我的$(CFLAGS)。甚至更奇怪,当我注释掉该%.o: %.c
部分时,Makefile也会执行完全相同的操作。
在我看来,它似乎正在使用某种默认的构建命令,而忽略了我的。
我已经看过我过去编写的Makefile,据我所知,它们以相同的方式使用完全相同的宏,因此我对为什么会如此感到非常困惑。
您将文件命名为* .cpp,而规则说* .c,这就是原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句