2010-02-04 57 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