Pergunta

Então, eu estou tendo problemas para compilar meu aplicativo que está usando yaml-CPP

Estou incluindo "yaml.h" em meus arquivos de origem (tal como os exemplos no wiki yaml-CPP), mas quando tento compilar o aplicativo eu recebo o seguinte erro:

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

meus makefile esta aparência:

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

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

e yaml.h está realmente localizado em / usr / local / include / yaml-CPP

Qualquer idéia de que eu poderia fazer?

Graças

Foi útil?

Solução

Seu destino padrão é "mac" e você tem regra como construí-lo. Depende de arquivos objeto e você não tem quaisquer regras de como construir aqueles, por isso certifique-se usando suas regras implícitas. Essas regras fazer exatamente isso:

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

Como você pode ver não há nenhuma parte -I/usr/local/... aqui.

A maneira mais fácil de corrigir isso é mudar CPPFLAGS e LDFLAGS valor globalmente:

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 é usado por regras implícitas que os arquivos de construção de objetos a partir de arquivos do CPP, então agora compilador deve encontrar cabeçalhos yaml.

Edit: LDFLAGS provavelmente deve ir atrás OBJECTS

Outras dicas

Você não incompatibilidade seu diretório de inclusão?

-I/usr/local/include

em vez de

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top