如何在 Windows 上为 SDL2/C++ 创建一个 makefile?
How do I create a makefile for SDL2/C++ on Windows?
如标题所述,我正在尝试创建一个 makefile,用于在 Windows 上使用 SDL2 编译 C++ 程序。我安装了 MinGW 并且可以正常工作。我使用 Sublime 2 作为我的环境。这是我目前所拥有的:
CXX = g++
CXXFLAGS = -std=c++0x -g -O3 -w -Wl,-subsystem,windows
INCLFLAGS = -IC:\Libraries\i686-w64-mingw32\include\SDL2
LDFLAGS = -LC:\Libraries\i686-w64-mingw32\lib -lmingw32 -lSDL2main -lSDL2
OBJECTS = main.o
TARGET = 1_hellosdl
$(TARGET) : $(OBJECTS)
$(CXX) $(INCLFLAGS) $(LDFLAGS) $(CXXFLAGS) -o $(TARGET) $(OBJECTS)
main.o :
clean:
rm -rf $(OBJECTS) $(TARGET)
remake:
clean $(TARGET)
现在当我编译时出现以下错误:
g++ -std=c++0x -g -O3 -w -Wl,-subsystems,windows -c -o main.o main.cpp
In file included from main.cpp:1:0:
main.hpp:4:17: fatal error: SDL.h: No such file or directory
#include <SDL.h>
所以问题是 g++
在尝试编译 main.cpp 时找不到 SDL 包含文件。我知道这是因为 $(INCLFLAGS)
没有被添加到 main.o :
.
下的行中
最理想的是,我想指定 INCLFLAGS
隐含地类似于 CXXFLAGS
和 LDFLAGS
,但基于 this 它看起来不太可能。
有没有办法使用隐式变量来做到这一点,或者如果做不到,最好的选择是什么?我还有什么地方做错了吗?
我设法通过将 $(INCLFLAGS)
移动到 $(CXXFLAGS)
来解决这个问题:
INCLFLAGS = -IC:\Libraries\i686-w64-mingw32\include\SDL2
CXXFLAGS = $(INCLFLAGS) -std=c++0x -g -O3 -w -Wl,-subsystem,windows
此外,我必须将 $(LDFLAGS)
移动到末尾才能使其正确 link:
$(TARGET) : $(OBJECTS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LDFLAGS)
如标题所述,我正在尝试创建一个 makefile,用于在 Windows 上使用 SDL2 编译 C++ 程序。我安装了 MinGW 并且可以正常工作。我使用 Sublime 2 作为我的环境。这是我目前所拥有的:
CXX = g++
CXXFLAGS = -std=c++0x -g -O3 -w -Wl,-subsystem,windows
INCLFLAGS = -IC:\Libraries\i686-w64-mingw32\include\SDL2
LDFLAGS = -LC:\Libraries\i686-w64-mingw32\lib -lmingw32 -lSDL2main -lSDL2
OBJECTS = main.o
TARGET = 1_hellosdl
$(TARGET) : $(OBJECTS)
$(CXX) $(INCLFLAGS) $(LDFLAGS) $(CXXFLAGS) -o $(TARGET) $(OBJECTS)
main.o :
clean:
rm -rf $(OBJECTS) $(TARGET)
remake:
clean $(TARGET)
现在当我编译时出现以下错误:
g++ -std=c++0x -g -O3 -w -Wl,-subsystems,windows -c -o main.o main.cpp
In file included from main.cpp:1:0:
main.hpp:4:17: fatal error: SDL.h: No such file or directory
#include <SDL.h>
所以问题是 g++
在尝试编译 main.cpp 时找不到 SDL 包含文件。我知道这是因为 $(INCLFLAGS)
没有被添加到 main.o :
.
最理想的是,我想指定 INCLFLAGS
隐含地类似于 CXXFLAGS
和 LDFLAGS
,但基于 this 它看起来不太可能。
有没有办法使用隐式变量来做到这一点,或者如果做不到,最好的选择是什么?我还有什么地方做错了吗?
我设法通过将 $(INCLFLAGS)
移动到 $(CXXFLAGS)
来解决这个问题:
INCLFLAGS = -IC:\Libraries\i686-w64-mingw32\include\SDL2
CXXFLAGS = $(INCLFLAGS) -std=c++0x -g -O3 -w -Wl,-subsystem,windows
此外,我必须将 $(LDFLAGS)
移动到末尾才能使其正确 link:
$(TARGET) : $(OBJECTS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LDFLAGS)