SDL Max OSX 通过 Homebrew,Makefile 不能正常工作
SDL Max OSX via Homebrew, Makefile not quite working
我已经通过自制软件安装了 SDL,如果我直接在终端中输入以下命令,它可以与我的测试程序完美配合:
g++ -O3 -g -Wall -Wextra -std=c++1y hello.cpp hello_main.cpp `sdl2-config --cflags --libs` -o hello
但不幸的是,我尝试编写一个 makefile(我肯定需要一个)已经产生了 unsuccessful/unexplained 个结果。
我正在关注这个,但我的配置是 different/I 我没有指定 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>
和 运行 一行命令,一切都会成功。如果我尝试上面的 makefile,找不到,但是如果我将指令更改为 #include <SDL2/SDL.h>
,就会发现库。然而控制台输出如下:
g++ -c -O3 -g -Wall -Wextra -std=c++1y hello.cpp -o hello
这是奇数。
运行 ./hello 产生一个 "permission denied" 错误,确认链接和编译不成功。
每个人的系统都有点不同,到目前为止我发现的问题在这种情况下无济于事。
我 非常 接近这个工作(但话又说回来,我将如何在 IDE 中开始使用它?我想只要我可以导入固定的 makefile 或仅从 IDE 构建 terminal/edit,我很好。)
我需要对 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)
您应该将 sdl2-config
分成两部分 - 因为有两个步骤。 sdl2-config --cflags
应该进入编译器步骤 - 那就是您示例中的 .cpp:.o
行。那么链接步骤应该是sdl2-config --libs
。第二个似乎适合你的情况,额外的 --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)
我已经通过自制软件安装了 SDL,如果我直接在终端中输入以下命令,它可以与我的测试程序完美配合:
g++ -O3 -g -Wall -Wextra -std=c++1y hello.cpp hello_main.cpp `sdl2-config --cflags --libs` -o hello
但不幸的是,我尝试编写一个 makefile(我肯定需要一个)已经产生了 unsuccessful/unexplained 个结果。 我正在关注这个,但我的配置是 different/I 我没有指定 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>
和 运行 一行命令,一切都会成功。如果我尝试上面的 makefile,找不到,但是如果我将指令更改为 #include <SDL2/SDL.h>
,就会发现库。然而控制台输出如下:
g++ -c -O3 -g -Wall -Wextra -std=c++1y hello.cpp -o hello
这是奇数。
运行 ./hello 产生一个 "permission denied" 错误,确认链接和编译不成功。 每个人的系统都有点不同,到目前为止我发现的问题在这种情况下无济于事。 我 非常 接近这个工作(但话又说回来,我将如何在 IDE 中开始使用它?我想只要我可以导入固定的 makefile 或仅从 IDE 构建 terminal/edit,我很好。)
我需要对 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)
您应该将 sdl2-config
分成两部分 - 因为有两个步骤。 sdl2-config --cflags
应该进入编译器步骤 - 那就是您示例中的 .cpp:.o
行。那么链接步骤应该是sdl2-config --libs
。第二个似乎适合你的情况,额外的 --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)