【发布时间】:2018-08-01 12:48:26
【问题描述】:
这是我的项目目录文件树:
.
├── 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,据我所知,它们以相同的方式使用完全相同的宏,所以我很困惑为什么会发生这种情况。
【问题讨论】:
-
将
%.o: %.c更改为%.o: %.cpp:-)