我正在编写一个SDL2/C++程序,需要在没有安装SDL的Windows、Mac和Linux机器上进行移植。
我了解到静态链接是解决方案,但我不擅长编译,也不知道如何进行静态链接。
我的程序仅依赖于SDL2、GLU和OpenGL。我使用MinGW(在Windows 8.1上)或gcc(在Ubuntu 14.04上)编译C++——这两个操作系统都已经本地安装了SDL。
这是我的当前makefile,是从我的一位教授给我的示例makefile中修改得来的:
我了解到静态链接是解决方案,但我不擅长编译,也不知道如何进行静态链接。
我的程序仅依赖于SDL2、GLU和OpenGL。我使用MinGW(在Windows 8.1上)或gcc(在Ubuntu 14.04上)编译C++——这两个操作系统都已经本地安装了SDL。
这是我的当前makefile,是从我的一位教授给我的示例makefile中修改得来的:
# Executable/file name
EXE=experiment
# MinGW
ifeq "$(OS)" "Windows_NT"
CFLG=-O3 -Wall -DUSEGLEW
LIBS= -lSDL2 -lglu32 -lopengl32
CLEAN=del *.exe *.o *.a
else
# OSX
ifeq "$(shell uname)" "Darwin"
CFLG=-O3 -Wall -Wno-deprecated-declarations
LIBS=-framework SDL2 -framework OpenGL
# Linux\Unix\Solaris
else
CFLG=-O3 -Wall
LIBS= `sdl2-config --cflags --libs` -lGLU -lGL -lm
endif
# OSX\Linux\Unix\Solaris
CLEAN=rm -f $(EXE) *.o *.a
endif
# Dependencies
$(EXE).o: $(EXE).cpp FORCE
.c.o:
gcc -c -o $@ $(CFLG) $<
.cpp.o:
g++ -std=c++11 -c -o $@ $(CFLG) $<
# Link
$(EXE):$(EXE).o
g++ -std=c++11 -O3 -o $@ $^ $(LIBS)
# Clean
clean:
$(CLEAN)
# Force
FORCE: