문제

그래서 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에 있습니다.

내가 무엇을 할 수 있을지 아시나요?

감사해요

도움이 되었습니까?

해결책

기본 대상은 "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

다른 팁

포함 디렉토리가 일치하지 않습니까?

-I/usr/local/include

대신에

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top