2010-02-04 53 views
2

所以我無法編譯這是使用YAML-CPP問題上使用OS X 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 

我生成文件看起來是這樣的:

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配置--cflags --libs yaml- cpp返回:

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

和yaml.h確實位於/ usr /本地/包括/ YAML的CPP

任何想法,我能做些什麼?

謝謝

回答

1

您的默認目標是「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頭潛規則。

編輯: LDFLAGS也許應該去後OBJECTS

0

難道你不匹配你的include目錄?

-I/usr/local/include

,而不是

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