سؤال

لذلك أواجه مشكلة في تجميع طلبي الذي يستخدم Yaml-CPP

أنا بما في ذلك "Yaml.h" في ملفات المصدر الخاصة بي (تماما مثل الأمثلة في Wiki 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

بلدي 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 / المحلية / تشمل / yaml-cpp

أي فكرة ماذا يمكنني أن أفعل؟

شكرا

هل كانت مفيدة؟

المحلول

الهدف الافتراضي الخاص بك هو "Mac" وكنت تحكم كيفية بناءه. يعتمد ذلك على ملفات الكائنات وليس لديك أي قواعد كيفية بناء تلك، لذلك جعل استخدام قواعدها الضمنية. تلك القواعد تفعل ذلك:

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