【问题标题】:Problem using yaml-cpp on OS X在 OS X 上使用 yaml-cpp 的问题
【发布时间】:2011-01-13 05:12:01
【问题描述】:

所以我在编译使用 yaml-cpp 的应用程序时遇到了问题

我在源文件中包含“yaml.h”(就像 yaml-cpp wiki 中的示例一样),但是当我尝试编译应用程序时,我收到以下错误:

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

我的 makefile 看起来像这样:

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

知道我能做什么吗?

谢谢

【问题讨论】:

    标签: c++ macos g++ pkg-config 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

    【讨论】:

      【解决方案2】:

      你的包含目录不匹配吗?

      -I/usr/local/include

      而不是

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

      【讨论】:

        猜你喜欢
        • 2016-10-07
        • 2013-12-02
        • 2021-02-17
        • 2011-04-26
        • 2018-10-04
        • 2010-12-31
        • 2012-08-15
        • 2016-09-26
        • 1970-01-01
        相关资源
        最近更新 更多