在 OS X 上使用 yaml-cpp 时出现问题

发布于 2024-08-20 15:31:33 字数 836 浏览 17 评论 0原文

因此,我在编译使用 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

任何想法我能做什么?

谢谢

So I'm having trouble compiling my application which is using yaml-cpp

I'm including "yaml.h" in my source files (just like the examples in the yaml-cpp wiki) but when I try compiling the application I get the following error:

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

my makefile looks like this:

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

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

and yaml.h is indeed located in /usr/local/include/yaml-cpp

Any idea what I could do?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

战皆罪 2024-08-27 15:31:33

您的默认目标是“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 之后

Your default target is "mac" and you have rule how to build it. It depends on object files and you do not have any rules how to build those, so make is using its implicit rules. Those rules do just that:

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

As you can see there is no -I/usr/local/... part here.

The easiest way to fix that is to change CPPFLAGS and LDFLAGS value globally:

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 value is used by implicit rules that build object files from cpp files, so now compiler should find yaml headers.

Edit:
LDFLAGS probably should go after OBJECTS

素食主义者 2024-08-27 15:31:33

你的包含目录不匹配吗?

-I/usr/local/include

而不是

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

Don't you mismatch your include directory?

-I/usr/local/include

instead of

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文