C++ 通过命令行设置SDL2 mac

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 -

我正在尝试将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 -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。