SDL Max OSX via Homebrew, Makefile ne fonctionne pas tout à fait

J’ai installé SDL via homebrew et cela fonctionne parfaitement avec mon programme de test si j’entre la commande suivante directement dans le terminal:

g++ -O3 -g -Wall -Wextra -std=c++1y hello.cpp hello_main.cpp `sdl2-config --cflags --libs` -o hello 

mais malheureusement, mes tentatives pour écrire un fichier makefile (j’en aurai certainement besoin) ont donné des résultats infructueux / inexpliqués. Je suis cela, mais ma configuration est différente / je ne spécifie pas Cocoa (ce n’est pas nécessaire), donc je suppose que les problèmes que je rencontre sont probablement dus en partie à mes besoins différents: Comstackr SDL sur OS X avec makefile Exemple:

 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=tesortings all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(OBJECTS) $(SDLFLAGS) -o $@ .cpp.o: $(CC) $(CFLAGS) $< -o $@ clean: rm -rf *.o $(EXECUTABLE) 

Mon makefile jusqu’à présent:

 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) 

Dans mon fichier d’en-tête .hpp, si je #include et que #include la commande one-liner, tout est réussi. Si j’essaie mon makefile ci-dessus, est introuvable, mais si je modifie ensuite la directive en #include la bibliothèque est découverte. Pourtant, la sortie de la console est la suivante:

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

ce qui est étrange.

L’exécution de ./hello génère une erreur “autorisation refusée” confirmant que la liaison et la compilation ont échoué. Le système de chacun est un peu différent et les questions que j’ai trouvées jusqu’à présent ne nous aident pas dans ce cas. Je suis sur le sharepoint le faire fonctionner (mais là encore, comment pourrais-je commencer à l’utiliser dans un IDE? Je suppose que tant que je peux importer le fichier makefile fixe ou construire à partir du terminal / modifier uniquement à partir de l’EDI, je vais bien .)

Quels changements dois-je effectuer dans le fichier Make? Je vous remercie.

MODIFIER:

Variation 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) 

Vous devriez diviser votre sdl2-config en deux, car il y a deux étapes. sdl2-config --cflags devrait aller dans l’étape du compilateur – c’est la ligne .cpp:.o dans votre exemple. L’étape de liaison devrait alors être sdl2-config --libs . Le second semble bien pour votre cas, les --cflags supplémentaires ne font pas de mal mais ne sont pas obligatoires.

J’ai bavardé avec un ami et compris ce qui n’allait pas: un tas de fautes de frappe et des bizarreries. Ce qui suit fonctionne pour tous ceux qui ont besoin d’un makefile de base:

 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)