【问题标题】:setup SDL2 mac through command line通过命令行设置 SDL2 mac
【发布时间】:2016-02-19 17:43:21
【问题描述】:

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

1) main.cpp

2) 生成文件

当我键入 make 时,我收到以下错误:main.cpp:2:10: fatal error: 'SDL2/SDL.h' file not found。 这是我的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 的人,我该怎么做? 谢谢。

【问题讨论】:

  • 不确定答案,但这些事情对我来说看起来很可疑:(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
  • 谢谢,我尝试删除空格,但没有帮助。框架和标题都在那里

标签: c++ macos makefile sdl-2


【解决方案1】:

您在正确的轨道上,但-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

【讨论】:

    【解决方案2】:

    如果你进入

    /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 文件

    【讨论】:

    • 不幸的是 sdl2-config 不附带 OSX SDL2 下载。 libsdl.org/download-2.0.php 上的 dmg 文件仅包含文件 SDL2.framework。看来如果你想要 sdl2-config 你必须先从源代码编译 SDL2,或者使用 homebrew/macports。
    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 2016-04-15
    • 2013-10-04
    • 2014-01-23
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多