需要帮助为SDL C++教程设置Makefile - 无法链接目标文件
我正在尝试为我正在执行的SDL C++教程获取基本的makefile。到目前为止,我已经做了一些搜索,并且我已经提出了一个Makefile,它将为我的Main和我的Graphics类生成目标文件,并链接位于单独目录中的Graphics头。当我尝试链接我的对象文件以生成可以运行的程序时,我遇到了问题。 我的目录设置像这样:需要帮助为SDL C++教程设置Makefile - 无法链接目标文件
source |__headers
| |__graphics.h
|
|__object
|
|__src
| |__main.cpp
| |__graphics.cpp
|
|__Makefile
的Makefile:
CC = g++ INC_DIR = headers
SRC_DIR = src
OBJ_DIR = object
COMPILER_FLAGS = -c -Wall -I$(INC_DIR)
LINKER_FLAGS = -lSDL2
SRCS = $(SRC_DIR)/main.cpp $(SRC_DIR)/graphics.cpp
OBJS = $(OBJ_DIR)/main.o $(OBJ_DIR)/graphics.o
DEPS = $(INC_DIR)/graphics.h
all : $(OBJS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CC) $(COMPILER_FLAGS) $(LINKER_FLAGS) -c $< -o [email protected]
$(OBJ_DIR)/%.o: $(DEPS)
clean:
rm -rf $(OBJS) all
rm -rf SDLCS
无论我的main.cpp和graphics.cpp有这些包括:
#include <SDL2/SDL.h> #include "graphics.h"
我能为我的对象目录下的main.cpp和graphics.cpp生成目标文件,但是我需要在生成文件中修改哪些内容才能生成可运行程序?
回答:
这里有一个略微更“规范”的GNU的Makefile,做的工作,要点是:
Make有许多内置变量和配方(
CPPFLAGS
等),您不必在指定自己的变量和配方时模拟make自己的用法,但它可能有助于其他必须维护Makefile的人员。只要扩展变量(
:=
)可以帮助您避免链下的问题,假设您不需要递归扩展(您不在这里)。作为编译过程的一部分,GCC和Clang可以使用
-M
预处理器标志自动生成依赖关系。不是实际文件的目标应该是
.PHONY
。由于您提供了自己的配方和编译依赖关系,因此使用静态模式(
blah: %.o: %.cpp
)将确保忽略其他隐式规则,这会加快make的进度。它在这里没有什么不同,它可能并不总是你需要的,但需要牢记。include $(DEPS)
后的最后部分被去掉一些内置的东西一样重塑的makefile加快速度,它再次可能并不总是你需要什么,它不会让这样的小项目的差异,但它很高兴知道。
INC_DIR := headers SRC_DIR := src
OBJ_DIR := object
CC := g++
CPPFLAGS := -I$(INC_DIR) -MMD -MP
CXXFLAGS := -Wall
LDLIBS := -lSDL2
SOURCES := $(wildcard $(SRC_DIR)/*.cpp)
OBJECTS := $(SOURCES:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
DEPS := $(wildcard $(OBJ_DIR)/*.d)
.PHONY: clean
main: $(OBJECTS)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o [email protected]
$(OBJECTS): $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(OUTPUT_OPTION) $<
clean: ; $(RM) $(DEPS) $(OBJECTS)
include $(DEPS)
$(MAKEFILE_LIST): ;
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
回答:
如果你希望你的可执行文件被称为“富”,添加此规则,以你的makefile(并使其成为第一条规则,如果你希望它是默认值):
foo: $(OBJS) $(CC) $(LINKER_FLAGS) $^ -o [email protected]
(另请注意,在$(OBJ_DIR)/%.o
规则,你有-c
标志的两倍,而什么都不做的链接标志。你可能需要更新您的clean
规则删除可执行文件。)
以上是 需要帮助为SDL C++教程设置Makefile - 无法链接目标文件 的全部内容, 来源链接: utcz.com/qa/257618.html