c++ - 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,据我所知,它们以相同的方式使用完全相同的宏,所以我对为什么会发生这种情况感到非常困惑。
解决方案
您将文件命名为 *.cpp 而您的规则命名为 *.c,这就是原因。
推荐阅读
- java - 如何从 url 获取参数值作为字符串
- ssl - Nginx 错误 https 。curl:(35)错误:1408F10B:SSL例程:ssl3_get_record:错误的版本号
- pyspark - Pyspark:如何编写复杂的数据帧计算引导和
- database - 角色的 LDAP 身份验证和数据库实体用户
- javascript - 分配 websocket 消息数据时无法读取未定义的属性
- python - 如何在 Chrome 中修复我的 Python 笔记本?
- scala - 添加稀疏向量 3.0.0 Apache Spark Scala
- laravel - 在 laravel 中使用访问器的问题
- vb.net - 使用 QBSDK 删除 Quickbooks 发票数据时,如何发现显然需要的“对象访问标志”
- linux - 两个 Linux 内核模块访问一个 i2c 从设备