生成文件不构建对象,我告诉它如何
Makefile not building objects how I'm telling it to
这是我的项目目录文件树:
.
├── 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,据我所知,它们以同样的方式使用完全相同的宏,所以我很困惑为什么会发生这种情况。
您将文件命名为*.cpp,而您的规则显示*.c,这就是原因。
它看起来像是C
的半转换Makefile。它使用了错误的变量,并查找C
文件而不是C++
。试试这个(未经测试(:
CXX := g++
CXXFLAGS := -Wall -pg
LDFLAGS := -lsfml-graphics -lsfml-window -lsfml-system
EXE := gametest
all: $(EXE)
%.o: %.cpp
$(CXX) -c $(CXXFLAGS) -o $@ $<
$(EXE): main.o entity.o player.o
$(CXX) -o $@ $^ $(LDFLAGS)
C++
使用CXX
,而C
使用CC
,与CXXFLAGS
相同。
注意:请记住,缩进是TAB
,而不是空格!
内置的%.o: %.cpp
规则使用CXX
(而非CC
(来指定编译器,并使用CXXFLAGS
CXX = g++
CXXFLAGS = -Wall -Wextra -pg
LIBS = -lsfml-graphics -lsfml-window -lsfml-system
gametest: main.o entity.o player.o
gametest: LINK.o = LINK.cc
相关文章:
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 为多个测试文件构建可执行文件
- 在QMAKE中编译之前,如何使用可执行文件构建多个标头文件
- 从同一文件构建基类和继承类
- cmake:如何迭代目录中的所有源文件并将每个文件构建到可执行文件中
- MEX文件构建具有八度的构建(包装纸问题)
- 通过解析文件构建逻辑语句
- C++ 如何从.dat文件构建字符串的 2D 矩阵?5 列 x 行
- 使用其他文件构建 gcc 插件
- 从文件构建有向图
- 仅使用 DLL *.h 头文件构建(compile.link)应用程序代码,并在运行时加载 DLL 实现(显式链接)
- 使用两个文本文件构建链表
- 从PSD文件构建层comps
- 如何从多个c++文件构建二进制文件
- Eclipse:没有什么要为文件构建的
- MATLAB mex文件构建成功,但没有显示任何内容
- Android OS框架-将单个可执行文件构建为共享对象
- 当尝试从使用makefile生成的目标文件构建时,c++链接器错误.在我刚建立的时候不会发生
- 为什么Xcode 4.2为.cpp文件应用C文件构建规则脚本?
- Matlab Mex文件构建:代码更改不再影响mex文件