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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top