Domanda

Così sto avendo problemi a compilare la mia applicazione che sta usando yaml-cpp

Sono inclusi "yaml.h" nei miei file di origine (proprio come gli esempi nel wiki yaml-CPP) ma quando provo compilazione l'applicazione ottengo il seguente errore:

g++    -c -o entityresourcemanager.o entityresourcemanager.cpp
entityresourcemanager.cpp:2:18: error: yaml.h: No such file or directory
make: *** [entityresourcemanager.o] Error 1

il mio makefile assomiglia a questo:

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 restituisce:

-I/usr/local/include/yaml-cpp  -L/usr/local/lib -lyaml-cpp

e yaml.h è infatti trova in / usr / local / include / yaml-cpp

Qualche idea di cosa avrei potuto fare?

Grazie

È stato utile?

Soluzione

Il vostro target di default è "mac" e si deve governare come costruirlo. Dipende da file oggetto e non avere alcuna regola come costruire quelli, in modo da rendere sta usando le sue regole implicite. Tali norme fanno proprio questo:

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

Come si può vedere non v'è alcuna parte -I/usr/local/... qui.

Il modo più semplice per risolvere questo è quello di cambiare CPPFLAGS e LDFLAGS valore a livello globale:

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) 

Valore CPPFLAGS viene utilizzato da regole implicite che costruiscono i file oggetto da file cpp, così ora compilatore dovrebbe trovare intestazioni YAML.

Modifica: LDFLAGS probabilmente dovrebbe andare dopo OBJECTS

Altri suggerimenti

Non non corrispondente tua includono directory?

-I/usr/local/include

anziché

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top