2010-02-04 3 views
2

Je vais avoir du mal à compiler mon application qui utilise yaml-cppProblème d'utilisation yaml-cpp sur OS X

Je compris « yaml.h » dans mes fichiers sources (comme les exemples dans la YAML-cpp wiki) 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) 

pkg-config --cflags --libs yaml- cpp retourne:

-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

Répondre

1

Votre cible par défaut est « mac » et que vous avez la règle comment le construire. Cela dépend des fichiers objets et vous n'avez pas de règles pour les construire, donc make utilise ses règles implicites. Ces règles font juste que:

g++ -c -o entityresourcemanager.o entityresourcemanager.cpp 

Comme vous pouvez le voir il n'y a pas -I/usr/local/... partie 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ée par des règles implicites qui construisent des fichiers objets à partir de fichiers cpp, maintenant compilateur devrait trouver les en-têtes de YAML.

Edit: LDFLAGS devrait probablement aller après OBJECTS

0

Ne pas vous MISMATCH votre include?

-I/usr/local/include

au lieu de

-I/usr/local/include/yaml-cpp