Problème d'utilisation yaml-cpp sur OS X
-
18-09-2019 - |
Question
Je ne parviens pas à compiler mon application qui utilise yaml-cpp
Je suis compris « yaml.h » dans mes fichiers sources (comme les exemples dans le wiki yaml-cpp) mais lorsque je tente de compiler l'application que je reçois l'erreur suivante:
g++ -c -o entityresourcemanager.o entityresourcemanager.cpp
entityresourcemanager.cpp:2:18: error: yaml.h: No such file or directory
make: *** [entityresourcemanager.o] Error 1
mon makefile ressemble à ceci:
CC = g++
CFLAGS = -Wall
APPNAME = game
UNAME = uname
OBJECTS := $(patsubst %.cpp,%.o,$(wildcard *.cpp))
mac: $(OBJECTS)
$(CC) `pkg-config --cflags --libs sdl` `pkg-config --cflags --libs yaml-cpp` $(CFLAGS) -o $(APPNAME) $(OBJECTS)
yaml-cpp de --cflags pkg-config renvoie:
-I/usr/local/include/yaml-cpp -L/usr/local/lib -lyaml-cpp
et yaml.h est bien situé dans / usr / local / include / yaml-cpp
Toute idée de ce que je pouvais faire?
Merci
La solution
Votre cible par défaut est « mac » et vous avez la règle comment le construire. Il dépend des fichiers objets et que vous n'avez des règles comment les construire, donc faire est d'utiliser ses règles implicites. Ces règles font juste que:
g++ -c -o entityresourcemanager.o entityresourcemanager.cpp
Comme vous pouvez le voir, il ne fait pas partie de -I/usr/local/...
ici.
La meilleure façon de résoudre ce problème est de changer la valeur CPPFLAGS et LDFLAGS globalement:
YAML_CFLAGS := $(shell pkg-config --cflags yaml-cpp)
YAML_LDFLAGS := $(shell pkg-config --libs yaml-cpp)
SDL_CFLAGS := $(shell pkg-config --cflags sdl)
SDL_LDFLAGS := $(shell pkg-config --libs sdl)
CPPFLAGS += $(YAML_CFLAGS) $(SDL_CFLAGS)
LDFLAGS += $(YAML_LDFLAGS) $(SDL_LDFLAGS)
mac: $(OBJECTS)
$(CXX) -o $(APPNAME) $(OBJECTS) $(LDFLAGS)
valeur CPPFLAGS
est utilisé par des règles implicites qui construisent des fichiers objets à partir de fichiers cpp, maintenant compilateur devrait trouver les en-têtes YAML.
Edit:
LDFLAGS
devrait probablement aller après OBJECTS
Autres conseils
Ne vous MISMATCH votre include?
-I/usr/local/include
au lieu de
-I/usr/local/include/yaml-cpp