2

そのため、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

私のメイクファイルは次のようになります。

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 にあります

私に何ができるか考えていますか?

ありがとう

4

2 に答える 2

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) 

CPPFLAGSvalue は、cpp ファイルからオブジェクト ファイルを構築する暗黙のルールによって使用されるため、コンパイラは yaml ヘッダーを見つける必要があります。

編集: LDFLAGSおそらく後に行く必要がありますOBJECTS

于 2010-02-04T18:54:41.030 に答える
0

インクルードディレクトリが一致していませんか?

-I/usr/local/include

それ以外の

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

于 2012-03-23T17:22:30.893 に答える