通过命令行设置SDL2 mac

问题描述 投票:0回答:3

我正在尝试设置 SDL2 以与 g++、文本编辑器和终端一起使用。 我的 SDL2.framework 在 /Library/Frameworks 中。 我的桌面上有一个名为testsdl的文件夹,其中包含两个文件:

1) main.cpp

2) 生成文件

当我输入 make 时,出现以下错误:main.cpp:2:10: fatal error: '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)

这是 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;
}

我尝试将 #include 更改为“SDL2/SDL.h”或只是或任何其他可能的组合。我通过 Xcode 进行设置没有问题,但不知道如何在不使用 IDE 的情况下完成它。

问题的第二部分是: 如果我想将框架包含在项目文件夹本身中,以便以后可以将二进制文件分发给机器上没有 SDL 的人员,我该怎么做? 谢谢。

c++ macos makefile sdl-2
3个回答
3
投票

您的方向是正确的,但是

-F /Library/Frameworks
也需要位于 CXXFLAGS 中。生成的命令应类似于:

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 的简化 makefile:

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
投票

如果你进入

/Users/path/where/i/unzipped/SDL2-2.0.5

然后跑

sdl2-config --cflags --libs

它打印出标头包含路径和库路径SDL

完整的通用构建可能看起来像这样:

g++ -std=c++11 main.cpp -o main.exe `sdl2-config --cflags` `sdl2-config --libs`

如果您愿意,您可以将其翻译成您的 make 文件


-1
投票

我意识到我需要对 C++ 的编译方式进行更多研究。我不完全理解很多答案中的很多命令和术语。有人知道这方面有什么好的资源吗?

© www.soinside.com 2019 - 2024. All rights reserved.