C++ SDL Max OSX通过自制,Makefile无法正常工作
我已通过自制软件安装了SDL,如果我直接在终端中输入以下命令,它将与我的测试程序完美配合:C++ SDL Max OSX通过自制,Makefile无法正常工作,c++,macos,makefile,sdl-2,C++,Macos,Makefile,Sdl 2,我已通过自制软件安装了SDL,如果我直接在终端中输入以下命令,它将与我的测试程序完美配合: g++ -O3 -g -Wall -Wextra -std=c++1y hello.cpp hello_main.cpp `sdl2-config --cflags --libs` -o hello 但不幸的是,我试图编写一个makefile(我肯定需要一个)却产生了不成功/无法解释的结果。 我遵循这一点,但我的配置不同/我没有指定Cocoa(我不需要),因此我认为我遇到的问题可能部分是由于我的不同需
g++ -O3 -g -Wall -Wextra -std=c++1y hello.cpp hello_main.cpp `sdl2-config --cflags --libs` -o hello
但不幸的是,我试图编写一个makefile(我肯定需要一个)却产生了不成功/无法解释的结果。
我遵循这一点,但我的配置不同/我没有指定Cocoa(我不需要),因此我认为我遇到的问题可能部分是由于我的不同需求:
例如:
这很奇怪
运行./hello会产生“权限被拒绝”错误,确认链接和编译未成功。
每个人的系统都有一点不同,我到目前为止发现的问题对这种情况没有帮助。
我很快就可以让它工作了(但话说回来,我该如何在IDE中开始使用它呢?我想只要我可以从终端导入固定的makefile或build/只从IDE编辑,我就可以了。)
我需要在makefile中做哪些更改?
多谢各位
编辑:
变更1:
CXX = g++
CXXFLAGS = -O3 -g -Wall -Wextra -std=c++1y -c
SDLCFLAGS = `sdl2-config --cflags`
SDLLIBFLAGS = `sdl2-config --libs`
SOURCES = hello_main.cpp hello.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECNAME = hello
all: $(SOURCES) $(EXECNAME)
$(EXECUTABLE): $(OBJECTS)
$(CXX) $ (OBJECTS) $(SDLLIBFLAGS) -o $@
.cpp.o:
$(CXX) $(CXXFLAGS) $(SDLCFLAGS) $< -o $@
clean :
-rm -f *.o *.core $(EXECNAME)
CXX=g++
CXXFLAGS=-O3-g-Wall-Wextra-std=c++1y-c
SDLCFLAGS=`sdl2 config--cflags`
SDLLIBFLAGS=`sdl2配置--libs`
SOURCES=hello\u main.cpp hello.cpp
对象=$(源:.cpp=.o)
EXECNAME=hello
全部:$(来源)$(EXECNAME)
$(可执行文件):$(对象)
$(CXX)$(对象)$(SDLLIBFLAGS)-o$@
.cpp.o:
$(CXX)$(CXXFLAGS)$(SDLCFLAGS)$<-o$@
清洁:
-rm-f*.o*.core$(EXECNAME)
您应该将您的sdl2配置
分为两部分-因为有两个步骤sdl2 config--cflags
应该在编译器步骤中,这是示例中的.cpp:.o
行。链接步骤应该是sdl2 config--libs
then。第二个似乎适合你的情况,附加的--cflags
没有坏处,但不是必需的。我和一个朋友聊天,发现了问题所在:一堆打字错误和规则古怪。对于任何需要基本makefile的人来说,以下方法都很有效:
CXX = g++
CXXFLAGS = -O3 -g -Wall -Wextra -std=c++1y
#LDFLAGS = -lSDL2_image
SDLCFLAGS = $(shell sdl2-config --cflags)
SDLLIBFLAGS = $(shell sdl2-config --libs)
SOURCES = hello_main.cpp hello.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECNAME = hello
all: $(EXECNAME)
$(EXECNAME): $(OBJECTS)
$(CXX) $(OBJECTS) $(SDLLIBFLAGS) $(LDFLAGS) -o $@
%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $(SDLCFLAGS) $< -o $@
clean :
-rm -f *.o *.core $(EXECNAME)
CXX=g++
CXXFLAGS=-O3-g-Wall-Wextra-std=c++1y
#LDFLAGS=-lSDL2\u图像
SDLCFLAGS=$(shell sdl2配置--cflags)
SDLLIBFLAGS=$(shell sdl2配置--libs)
SOURCES=hello\u main.cpp hello.cpp
对象=$(源:.cpp=.o)
EXECNAME=hello
全部:$(EXECNAME)
$(EXECNAME):$(对象)
$(CXX)$(对象)$(SDLLIBFLAGS)$(LDFLAGS)-o$@
%.o:%.cpp
$(CXX)-c$(CXXFLAGS)$(SDLCFLAGS)$<-o$@
清洁:
-rm-f*.o*.core$(EXECNAME)
我不确定我是否正确解释了你的答案。我已经编辑了我的问题,以包括我认为您所说的内容,但我仍然会得到控制台输出g++-O3-g-Wall-Wextra-std=c++1y-c hello.cpp-o hello
和-bash:./hello:Permission denied
,当我尝试运行时。请尝试文件测试
,查看操作系统是否显示了它是什么类型的文件。也许chmod u+x test
可以使其可执行,但似乎有些奇怪,默认情况下应该可以。改为使用`pkg config--cflags sdl2--libs`
进行尝试。
g++ -c -O3 -g -Wall -Wextra -std=c++1y hello.cpp -o hello
CXX = g++
CXXFLAGS = -O3 -g -Wall -Wextra -std=c++1y -c
SDLCFLAGS = `sdl2-config --cflags`
SDLLIBFLAGS = `sdl2-config --libs`
SOURCES = hello_main.cpp hello.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECNAME = hello
all: $(SOURCES) $(EXECNAME)
$(EXECUTABLE): $(OBJECTS)
$(CXX) $ (OBJECTS) $(SDLLIBFLAGS) -o $@
.cpp.o:
$(CXX) $(CXXFLAGS) $(SDLCFLAGS) $< -o $@
clean :
-rm -f *.o *.core $(EXECNAME)
CXX = g++
CXXFLAGS = -O3 -g -Wall -Wextra -std=c++1y
#LDFLAGS = -lSDL2_image
SDLCFLAGS = $(shell sdl2-config --cflags)
SDLLIBFLAGS = $(shell sdl2-config --libs)
SOURCES = hello_main.cpp hello.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECNAME = hello
all: $(EXECNAME)
$(EXECNAME): $(OBJECTS)
$(CXX) $(OBJECTS) $(SDLLIBFLAGS) $(LDFLAGS) -o $@
%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $(SDLCFLAGS) $< -o $@
clean :
-rm -f *.o *.core $(EXECNAME)