gpt4 book ai didi

c++ - Makefile 目标错误

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:58 25 4
gpt4 key购买 nike

我一直在阅读一本关于 SFML 游戏开发的书,他们使用了 unique_ptr。为了使用它们,我知道我必须在编译时使用 -std=c++11 标志,但是我在使用 Makefile 时遇到了问题。下面是我的 Makefile 的拷贝:

flags = -lsfml-graphics -lsfml-window -lsfml-system

main: main.cpp texture_holder.o
g++ main.cpp texture_holder.o -o Run $(flags) -std=c++11

texture_holder: texture_holder.cpp texture_holder.h
g++ texture_holder.cpp -c -std=c++11

.PHONY: clean
clean:
rm *.o Run

当我输入 ma​​ke 时,我得到关于 unique_ptr 不是 std 成员的错误。但我无法弄清楚的是,当我键入 ma​​ke texture_holder 时,texture_holder.cpp 编译得很好,然后运行 ​​ma​​ke 构建应用程序。我订购的东西有误还是我遗漏了什么?如果有帮助,我可以附上我正在使用的代码,但正如我所说,当我首先构建 texture_holder 目标时,它构建得很好。

最佳答案

texture_holder.o 的规则有误,应该是这样的:

texture_holder.o: texture_holder.cpp texture_holder.h
g++ texture_holder.cpp -c -std=c++11

即。包括 .o 扩展名。


你的问题的版本发生了什么,当你做 make texture_holder 时,你执行了那个特定的规则,它实际上并没有创建相应的文件 texture_holder,它创建了 texture_holder.o,因为这就是推荐产生的结果。 texture_holder 规则实际上是一个虚假规则,类似于 mainclean (顺便说一句,你应该添加 main也到 .PHONY)。

如果您make main,然后创建texture_holder.omake 使用隐式规则(因为有没有明确的),它使用不同的编译命令。

关于c++ - Makefile 目标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23657851/

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