Pregunta

Así que estoy teniendo problemas para compilar mi aplicación que está usando yaml-CPP

Estoy incluyendo "yaml.h" en mis archivos de origen (al igual que los ejemplos en el yaml-CPP wiki) pero cuando intento compilar la aplicación me sale el siguiente error:

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

mi makefile se ve así:

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)

--cflags pkg-config --libs yaml-CPP retornos:

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

y yaml.h está de hecho situado en / usr / local / include / yaml-CPP

¿Alguna idea de qué podía hacer?

Gracias

¿Fue útil?

Solución

Su objetivo por defecto es "Mac" y hay que gobernar cómo construirlo. Depende de los ficheros objeto y que no tiene ninguna regla de cómo construir esos, así que está utilizando sus reglas implícitas. Esas normas hacen precisamente eso:

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

Como se puede ver no hay parte -I/usr/local/... aquí.

La forma más fácil de arreglar eso es cambiar CPPFLAGS y LDFLAGS valor global:

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) 

valor CPPFLAGS es utilizado por reglas implícitas que construyen los ficheros objeto de cpp, por lo que ahora el compilador debe encontrar las cabeceras YAML.

Editar: LDFLAGS probablemente debería ir después OBJECTS

Otros consejos

¿No falta de coincidencia necesidades de inclusión directorio?

-I/usr/local/include

en lugar de

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top