Glad: مشاكل في استخدام CMake على Windows

تم إنشاؤها على ٢١ سبتمبر ٢٠١٨  ·  7تعليقات  ·  مصدر: Dav1dde/glad

مرحبا،

أواجه مشكلة في الاستمتاع بالعمل مع CMake على Windows. أود أن أحصل على تشغيل سعيد كجزء من عملية بناء CMake ، واستخدام ملفات glad.h / lib التي تم إنشاؤها في مشروعنا.

للاختبار ، تبدو بنية المجلد الخاص بي كما يلي:
C:\Users\me\projects\glad (مستنسخ من GitHub)
C:\Users\me\projects\glad-driver (دليل جديد لا يحتوي على أي شيء سوى CMakeLists.txt)

لقد صنعت أدلة فارغة build\ من كل من هذه الدلائل أيضًا.

محتويات glad-driver\CMakeLists.txt هي:

cmake_minimum_required(VERSION 3.0)
set(glad_DIR "..\\glad\\build")
find_package(glad REQUIRED)

فيما يلي الأوامر التي أستخدمها لمحاولة بناء سائق سعيد. قم بتشغيل CM لأول مرة:

> قرص سعيد \ بناء
> cmake -DGLAD_INSTALL = تشغيل ..

نتيجة:

- بناء لـ: Visual Studio 15 2017
- تعريف برنامج التحويل البرمجي C هو MSVC 19.15.26729.0
- تحقق من وجود مترجم C: C: / Program Files (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe
- تحقق من برنامج التحويل البرمجي C: C: / Program Files (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe - يعمل
- الكشف عن معلومات المترجم C ABI
- الكشف عن معلومات المترجم C ABI - تم
- الكشف عن ميزات C compile
- الكشف عن ميزات C compile - تم
- تم العثور على PythonInterp: C: /Users/me/AppData/Local/Programs/Python/Python36/python.exe (تم العثور على الإصدار "3.6.5")
- تم التهيئة
- تم التوليد
- تمت كتابة ملفات الإنشاء إلى: C: / Users / me / projects / glad / build

بعد ذلك ، قم بتجميع مشاريع Visual Studio التي تم إنشاؤها:

> msbuild / p: التكوين = إطلاق ALL_BUILD.vcxproj

نتيجة:
(الكثير من الأشياء بعد ذلك):

تم إنجاز مشروع البناء "C: \ Users \ me \ projects \ glad \ build \ ALL_BUILD.vcxproj" (الأهداف الافتراضية).

نجح البناء.
0 تحذير (تحذيرات)
0 خطأ (أخطاء)

الوقت المنقضي 00: 00: 02.08

الخطوة الأخيرة ، حاول البحث عن السعادة باستخدام أمر CMake find_package :

> قرص .... \ مسرور سائق \ بناء
> سميك ..

نتيجة:

- بناء لـ: Visual Studio 15 2017
- تعريف برنامج التحويل البرمجي C هو MSVC 19.15.26729.0
- تعريف برنامج التحويل البرمجي CXX هو MSVC 19.15.26729.0
- تحقق من وجود مترجم C: C: / Program Files (x86) / Microsoft Visual> Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe
- تحقق من برنامج التحويل البرمجي C: C: / Program Files (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe - يعمل
- الكشف عن معلومات المترجم C ABI
- الكشف عن معلومات المترجم C ABI - تم
- الكشف عن ميزات C compile
- الكشف عن ميزات C compile - تم
- تحقق من عمل مترجم CXX: C: / Program Files (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe
- تحقق من عمل مترجم CXX: C: / Program Files (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe - يعمل
- كشف معلومات المترجم CXX ABI
- الكشف عن معلومات ABI مترجم CXX - تم
- الكشف عن ميزات تجميع CXX
- الكشف عن ميزات تجميع CXX - تم
خطأ CMake في C: / Users / me / projects / glad / build / gladConfig. cmake: 27 (تشمل):
تضمين تعذر العثور على ملف التحميل:

C:/Users/me/projects/glad/build/gladTargets.cmake

Call Stack (أحدث مكالمة أولاً):
قوائم CMakeLists. TXT: 3 (find_package)

- تكوين أخطاء غير مكتملة!
انظر أيضًا "C: /Users/me/projects/glad-driver/build/CMakeFiles/CMakeOutput.log".

يكشف المزيد من التحقيق أن ملف gladTargets.cmake (ومجموعة من الملفات التي تبدو ذات صلة موجودة بالفعل في):

C:\Users\me\projects\glad\build\CMakeFiles\Export\lib\cmake\glad\gladTargets.cmake

لا أعرف لماذا ينتهي gladConfig.cmake في build gladTargets.cmake وينتهي build\CmakeFiles\Export\lib\cmake\glad .

إذا قمت بنسخ gladTargets.cmake في الدليل glad\build وأعدت تشغيل CMake من برنامج glad-driver ، فإن مشروع CMake الخاص ببرنامج التشغيل السعيد ينجح. ومع ذلك ، إذا أضفت الأسطر التالية إلى glad-driver \ CMakeLists.txt:

add_executable (hello_glad "HelloGlad.cpp")
target_link_libraries(hello_glad glad::glad)

ثم يظهر لي الخطأ التالي:

خطأ CMake في CMakeLists.txt:
الهدف المستورد "glad :: glad" على تضمين المسار غير الموجود

"C:/Users/me/include/glad"

في INTERFACE_INCLUDE_DIRECTORIES. تشمل الأسباب المحتملة ما يلي:

  • تم حذف المسار أو إعادة تسميته أو نقله إلى موقع آخر.

  • لم يكتمل إجراء التثبيت أو إلغاء التثبيت بنجاح.

  • كانت حزمة التثبيت خاطئة ولا تشير إلى الملفات
    تزود.

أي مساعدة سيكون موضع تقدير كبير!

glad1 question

التعليق الأكثر فائدة

مرحبا بالجميع.

tysonbrochu ، هل فكرت في تجربة وحدة FetchContent بدلاً من الاستنساخ يدويًا؟

اقتراحي هو إعطائها فرصة. قد يحل المشكلة التي لديك (تسمح لـ CMake بمعالجة كل شيء نيابة عنك). بالإضافة إلى ذلك ، يمكنك إدارة التبعيات الأخرى بنفس الطريقة الموحدة.

  1. قم بتحرير الجذر CMakeLists.txt وأضف السطر التالي:
    add_subdirectory(extern)
  2. أنشئ دليلاً extern في المجلد الجذر للمشروع.
  3. قم بإنشاء ملف extern/CMakeLists.txt بالمحتوى التالي:
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
# Multi-Language Vulkan/GL/GLES/EGL/GLX/WGL Loader-Generator based on
# the official specs. http://glad.dav1d.de/
FetchContent_Declare(
  extern_glad

  GIT_REPOSITORY https://github.com/Dav1dde/glad.git
  GIT_TAG        v0.1.27)

FetchContent_GetProperties(extern_glad)
if(NOT extern_glad_POPULATED)
  FetchContent_Populate(extern_glad)

  set(GLAD_INSTALL ON)
  add_subdirectory(
    ${extern_glad_SOURCE_DIR}
    ${extern_glad_BINARY_DIR}
    EXCLUDE_FROM_ALL)
endif()
  1. أضف glad كتبعية داخل واحدة من CMakeLists.txt s كالمعتاد:
target_link_libraries(the_target_you_want_to_link_agains_glad
  PUBLIC
  glad

  PRIVATE
  ${CMAKE_DL_LIBS})

أتمنى أن يساعدك هذا.

ال 7 كومينتر

شكرًا على الوصف الشامل لمشكلتك - سيتعين عليّ النظر في هذا ومحاولة إعادة إظهار هذه المشكلة.

sfuller ربما يمكنك مساعدتي في النظر في هذا؟

شكرا على الرد السريع!

أعتقد أنني قد أكون أقرب إلى حل الآن. أعتقد أنه بدلاً من تشغيل msbuild على إخراج happy cmake ، يجب أن أقوم بتشغيل cmake --build . --install . يبدو أن هذا يحاول تثبيت كل شيء (gladConfig و gladTargets) في دليل CMake الخاص بي. سأستمر في التحقيق ، ولكن ما زلت مهتمة بمعرفة ما إذا كان أي شخص قد حقق أي نجاح في إعداد مماثل.

هل هذا الرقم؟ آسف مشغول في الوقت الحالي ، سأحاول إلقاء نظرة على عطلة نهاية الأسبوع مرة أخرى.

لا مشكلة. لم نتتبع هذا حتى الوصول إلى حل عملي ، وكان علينا الانتقال إلى أشياء أخرى. لذلك في الوقت الحالي ، سنقوم فقط بدمج ملفات .h / .c التي تم إنشاؤها مسبقًا مباشرةً في بنائنا ، بدلاً من المرور عبر آلية CMake الخاصة بـ glad. إذا قمنا بإعادة الزيارة في المستقبل ، فسوف أقوم بتحديث هذه المشكلة.

شكرا مرة أخرى لمساعدتكم.

مرحبا بالجميع.

tysonbrochu ، هل فكرت في تجربة وحدة FetchContent بدلاً من الاستنساخ يدويًا؟

اقتراحي هو إعطائها فرصة. قد يحل المشكلة التي لديك (تسمح لـ CMake بمعالجة كل شيء نيابة عنك). بالإضافة إلى ذلك ، يمكنك إدارة التبعيات الأخرى بنفس الطريقة الموحدة.

  1. قم بتحرير الجذر CMakeLists.txt وأضف السطر التالي:
    add_subdirectory(extern)
  2. أنشئ دليلاً extern في المجلد الجذر للمشروع.
  3. قم بإنشاء ملف extern/CMakeLists.txt بالمحتوى التالي:
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
# Multi-Language Vulkan/GL/GLES/EGL/GLX/WGL Loader-Generator based on
# the official specs. http://glad.dav1d.de/
FetchContent_Declare(
  extern_glad

  GIT_REPOSITORY https://github.com/Dav1dde/glad.git
  GIT_TAG        v0.1.27)

FetchContent_GetProperties(extern_glad)
if(NOT extern_glad_POPULATED)
  FetchContent_Populate(extern_glad)

  set(GLAD_INSTALL ON)
  add_subdirectory(
    ${extern_glad_SOURCE_DIR}
    ${extern_glad_BINARY_DIR}
    EXCLUDE_FROM_ALL)
endif()
  1. أضف glad كتبعية داخل واحدة من CMakeLists.txt s كالمعتاد:
target_link_libraries(the_target_you_want_to_link_agains_glad
  PUBLIC
  glad

  PRIVATE
  ${CMAKE_DL_LIBS})

أتمنى أن يساعدك هذا.

مرحبًا ، آسف لقد تأخرت على هذه المحادثة.
في مشروعك ، أنت تستخدم find_package(glad REQUIRED) .
لا أعتقد أن هذا سيعمل إلا إذا كان لديك وحدة خاصة تستخدم للعثور على GLAD. لاستخدام آلية حزمة التكوين CMake التي يستخدمها Glad ، حاول بدلاً من ذلك استخدام find_package(glad REQUIRED CONFIG)

لاحظ أنك ستحتاج إلى تشغيل cmake --build . --install على الإنشاء السعيد أولاً. أيضًا ، إذا كان CMake لا يزال غير قادر على العثور على هدف GLAD ، فقد تحتاج إلى توجيه CMake إلى الملفات المثبتة باستخدام -DCMAKE_PREFIX_PATH . راجع وثائق find_package للحصول على معلومات أكثر تفصيلاً عن ذلك: https://cmake.org/cmake/help/v3.12/command/find_package.html

أفترض أن هذا قد تم حله ، إذا لم تتردد في إعادة فتحه.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

incendor picture incendor  ·  8تعليقات

Algorithmus picture Algorithmus  ·  7تعليقات

mesbahamin picture mesbahamin  ·  3تعليقات

computersarecool picture computersarecool  ·  6تعليقات

Maigo picture Maigo  ·  4تعليقات