SDL Max OSX通过Homebrew,Makefile不太起作用

时间:2017-01-07 18:37:43

标签: 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(我不需要)所以我希望我遇到的问题可能部分是由于我的不同要求: Compiling SDL on OS X with makefile 例如:

CC=g++
CFLAGS=-c -Wall
SDLFLAGS=`sdl-config --cflags --libs` -framework Cocoa
SOURCES=main.cpp Game.cpp IO.cpp Board.cpp Pieces.cpp Piece.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=tetris

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
 $(CC) $(OBJECTS) $(SDLFLAGS) -o $@

.cpp.o:
 $(CC) $(CFLAGS) $< -o $@

clean:
 rm -rf *.o $(EXECUTABLE)

到目前为止我的makefile:

CXX       = g++
CXXFLAGS  = -c -O3 -g -Wall -Wextra -std=c++1y
SDLFLAGS  = `sdl2-config --cflags --libs`
SOURCES   = hello_main.cpp hello.cpp 
OBJECTS   = $(SOURCES:.cpp=.o)
EXECNAME  = hello

all: $(SOURCES) $(EXECNAME)

$(EXECUTABLE): $(OBJECTS)
    $(CXX) $ (OBJECTS) $(SDLFLAGS) -o $@

.cpp.o:
    $(CXX) $(CXXFLAGS) $< -o $@

clean :
    -rm -f *.o *.core $(EXECNAME)

在我的.hpp头文件中,如果我#include <SDL.h>并运行one-liner命令,一切都成功了。如果我在上面尝试我的makefile,则无法找到,但如果我将指令更改为#include <SDL2/SDL.h>,则会发现库。控制台输出如下:

g++ -c -O3 -g -Wall -Wextra -std=c++1y    hello.cpp   -o hello

这很奇怪。

运行./hello会产生&#34;权限被拒绝&#34;错误,确认链接和编译不成功。 每个人的系统都有点不同,到目前为止我发现的问题在这种情况下并没有帮助。 我非常接近这个工作(但话又说回来,我将如何在IDE中开始使用它?我想只要我可以导入固定的makefile或仅从终端/编辑构建从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)

2 个答案:

答案 0 :(得分:0)

您应该将sdl2-config拆分为两个 - 因为有两个步骤。 sdl2-config --cflags应该放在编译器步骤中 - 那就是你的例子中的.cpp:.o行。然后,链接步骤应为sdl2-config --libs。第二个似乎对你的情况很好,额外的--cflags没有伤害,但不是必需的。

答案 1 :(得分:0)

我和一位朋友聊天,想出了什么是错的:一堆拼写错误和规则怪异。以下工作适用于那些需要基本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)