如何制作" Linux上的SDL项目?

时间:2014-12-21 03:54:11

标签: c++ linux makefile sdl sdl-2

Makefiles让我很困惑。我正试图"制造"我在Windows中工作过的项目。令人困惑的部分实际上是从头开始构建make文件。我也想尝试链接到SDL2库,这是在' .a'格式。

到目前为止,这是我的make文件的代码,我尝试了多个版本,这是最新的:

CXX = gcc
OUT = Engine
SRC =Software-Rendering/src/
SDL_INCLUDE_DIR =Software-Rendering/lib/SDL2/include/SDL/
LIB_DIR =Software-Rendering/lib/SDL2/x86/linuxLib/

SDL = -l${LIB_DIR}libSDL -l${LIB_DIR}/libSDL2main

CPP_FILES =Bitmap.cpp Main.cpp Vector3.cpp Window.cpp
H_FILES =Bitmap.h ErrorReport.h Vector3.h Window.h

O_FILES = Bitmap.o ErrorReport.o Main.o Vector3.o Window.o

all: $(OUT)

$(OUT): $(O_FILES)
    $(CXX) -o $@ $^ ${SDL}

#Making all of the object files down
$(O_FILES): $(H_FILES)
    $(CXX) -c $(CPP_FILES)
#Make sure we can easily clean up the directory
clean:
    rm -f Engine ${O_FILES}

clean_obj:
    rm -f ${O_FILES}

我决定把#34; .a"在我的项目中的特殊指南中的文件,所以每当有人在github上克隆我的存储库时,所有用于编译和链接的文件都已存在。

为什么这不起作用,我该如何才能使它发挥作用?

1 个答案:

答案 0 :(得分:1)

您的库链接指令错误 - -l前缀lib到您指定的名称,然后搜索-L选项设置的libdir路径。所以你想要的是:

SDL = -L$(LIB_DIR) -lSDL -lSDL2main

通过使用库的标准varnames可以使它更清晰/更标准:

LDFLAGS = -L$(LIB_DIR)
LDLIBS = -lSDL -lSDL2main

$(OUT): $(O_FILES)
        $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@

此外,摆脱显式命令来编译源文件 - 默认的内置规则很好,更容易使用。