Ben*_*ici 5 c++ macos makefile sdl-2
我正在尝试将SDL2设置为与g ++,文本编辑器和终端一起使用.我在/ Library/Frameworks中有我的SDL2.framework.我的桌面上有一个名为testsdl的文件夹,其中包含两个文件:
1)main.cpp
2)makefile
当我输入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)
Run Code Online (Sandbox Code Playgroud)
这是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;
}
Run Code Online (Sandbox Code Playgroud)
我尝试将#include更改为"SDL2/SDL.h"或只是或任何其他可能的组合.我没有问题通过Xcode设置它,但无法使用IDE无法弄清楚如何做到这一点.
问题的第二部分是:如果我想将框架包含在项目文件夹本身中,那么我以后可以将二进制文件分发给在他们的机器上没有SDL的人,我该怎么做?谢谢.
您的方向是正确的,但-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
Run Code Online (Sandbox Code Playgroud)
这是一个适用于 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
Run Code Online (Sandbox Code Playgroud)