Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL Max OSX通过自制,Makefile无法正常工作_C++_Macos_Makefile_Sdl 2 - Fatal编程技术网

C++ SDL Max OSX通过自制,Makefile无法正常工作

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(我不需要),因此我认为我遇到的问题可能部分是由于我的不同需

我已通过自制软件安装了SDL,如果我直接在终端中输入以下命令,它将与我的测试程序完美配合:

 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)