Проблема с использованием yaml-cpp на OS X - PullRequest
2 голосов
/ 04 февраля 2010

Так что у меня проблемы с компиляцией моего приложения, использующего yaml-cpp

Я включаю "yaml.h" в мои исходные файлы (так же, как примеры в вики yaml-cpp), но при попытке компилировать приложение я получаю следующую ошибку:

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

мой make-файл выглядит так:

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 возвращает:

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

и yaml.h действительно находится в / usr / local / include / yaml-cpp

Есть идеи, что я мог сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 04 февраля 2010

Ваша цель по умолчанию - "mac", и у вас есть правило, как его построить. Это зависит от объектных файлов, и у вас нет никаких правил их создания, поэтому make использует неявные правила. Эти правила делают именно это:

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

Как видите, здесь нет -I/usr/local/... части.

Самый простой способ исправить это - изменить значения CPPFLAGS и LDFLAGS глобально:

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) 

CPPFLAGS значение используется неявными правилами, которые создают объектные файлы из файлов cpp, поэтому теперь компилятор должен находить заголовки yaml.

Edit: LDFLAGS вероятно, должно идти после OBJECTS

0 голосов
/ 23 марта 2012

Вы не соответствуете вашему каталогу включения?

-I/usr/local/include

вместо

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

...