C++ 通过命令行设置SDL2 mac
我正在尝试将SDL2设置为与g++一起使用,g++是一个文本编辑器和终端。 我的SDL2.framework位于/Library/Frameworks中。 我的桌面上有一个名为testsdl的文件夹,其中包含两个文件: 1) main.cpp 2) 生成文件 键入make时,出现以下错误:main.cpp:2:10:致命错误:“未找到SDL2/SDL.h”文件。 这是我的makefile的副本C++ 通过命令行设置SDL2 mac,c++,macos,makefile,sdl-2,C++,Macos,Makefile,Sdl 2,我正在尝试将SDL2设置为与g++一起使用,g++是一个文本编辑器和终端。 我的SDL2.framework位于/Library/Frameworks中。 我的桌面上有一个名为testsdl的文件夹,其中包含两个文件: 1) main.cpp 2) 生成文件 键入make时,出现以下错误:main.cpp:2:10:致命错误:“未找到SDL2/SDL.h”文件。 这是我的makefile的副本 CXX = g++ SDL = -framework SDL2 CXXFLAGS = -Wall -
CXX = g++
SDL = -framework SDL2
CXXFLAGS = -Wall -c -std=c++11 -I ~/Library/Frameworks/SDL2.framework/Headers
LDFLAGS = $(SDL) -F /Library/Frameworks -F ~/Library/Frameworks/
EXE = SDL_Lesson0
all: $(EXE)
$(EXE): main.o
$(CXX) $(LDFLAGS) $< -o $@
main.o: main.cpp
$(CXX) $(CXXFLAGS) $< -o $@
clean:
rm *.o && rm $(EXE)
CXX=g++
SDL=-frameworksdl2
CXXFLAGS=-Wall-c-std=c++11-I~/Library/Frameworks/SDL2.framework/Headers
LDFLAGS=$(SDL)-F/Library/Frameworks-F~/Library/Frameworks/
EXE=SDL_第0课
全部:$(EXE)
$(EXE):main.o
$(CXX)$(LDFLAGS)$<-o$@
main.o:main.cpp
$(CXX)$(CXXFLAGS)$<-o$@
清洁:
rm*.o&&rm$(EXE)
这是main.cpp的副本:
#include <iostream>
#include <SDL2/SDL.h>
int main(int, char**)
{
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
return 1;
}
SDL_Quit();
return 0;
}
#包括
#包括
int main(int,char**)
{
如果(SDL_Init(SDL_Init_视频)!=0)
{
std::如果你进入
/Users/path/where/i/unzipped/SDL2-2.0.5
跑
sdl2-config --cflags --libs
它打印出标题include path和library path SDL
完整的通用构建可能类似于:
g++ -std=c++11 main.cpp -o main.exe `sdl2-config --cflags` `sdl2-config --libs`
g++ -Wall -F /Library/Frameworks -c -o main.o main.cpp
g++ main.o -o main -framework SDL2 -I /Library/Frameworks/SDL2.framework/Headers
如果您愿意,您可以将其转换为make文件,但CXXFLAGS中也需要有-F/Library/Frameworks
。生成的命令应该类似于:
g++ -std=c++11 main.cpp -o main.exe `sdl2-config --cflags` `sdl2-config --libs`
g++ -Wall -F /Library/Frameworks -c -o main.o main.cpp
g++ main.o -o main -framework SDL2 -I /Library/Frameworks/SDL2.framework/Headers
下面是一个在OSX 10.12.6上适用的简化生成文件:
CXX = g++
CXXFLAGS = -Wall -F /Library/Frameworks
LDFLAGS = -framework SDL2 -F /Library/Frameworks -I /Library/Frameworks/SDL2.framework/Headers
all: main
main: main.o
$(CXX) main.o -o main $(LDFLAGS)
obj/main.o : main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp -o main.o
clean:
rm main.o main
我不知道确切的答案,但这些东西看起来很可疑:(1)为什么-I
和路径~/Library/Frameworks/SDL2.framework/Headers
?通常-I
、-L
、-L
或任何其他编译器标志及其参数之间没有空格。(2)~/Library/Frameworks/SDL2.framework/Headers/SDL2/SDL.h
是否确实存在?如果不存在,则存在您的问题。(3)如果您希望编译跨平台(即在linux/bsd/windows上工作)那么我想你也应该远离-framework
,使用-L-L
来代替谢谢,我尝试过删除空格,但没有用。框架和标题都是这样的。sdl2配置并不附带OSX sdl2下载。上的dmg文件只包含文件sdl2.framework。如果你想的话sdl2配置您必须首先从源代码处编译sdl2,或者使用自制/macports。