مرحبا،
أواجه مشكلة في الاستمتاع بالعمل مع 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. تشمل الأسباب المحتملة ما يلي:
تم حذف المسار أو إعادة تسميته أو نقله إلى موقع آخر.
لم يكتمل إجراء التثبيت أو إلغاء التثبيت بنجاح.
كانت حزمة التثبيت خاطئة ولا تشير إلى الملفات
تزود.
أي مساعدة سيكون موضع تقدير كبير!
شكرًا على الوصف الشامل لمشكلتك - سيتعين عليّ النظر في هذا ومحاولة إعادة إظهار هذه المشكلة.
sfuller ربما يمكنك مساعدتي في النظر في هذا؟
شكرا على الرد السريع!
أعتقد أنني قد أكون أقرب إلى حل الآن. أعتقد أنه بدلاً من تشغيل msbuild على إخراج happy cmake ، يجب أن أقوم بتشغيل cmake --build . --install
. يبدو أن هذا يحاول تثبيت كل شيء (gladConfig و gladTargets) في دليل CMake الخاص بي. سأستمر في التحقيق ، ولكن ما زلت مهتمة بمعرفة ما إذا كان أي شخص قد حقق أي نجاح في إعداد مماثل.
هل هذا الرقم؟ آسف مشغول في الوقت الحالي ، سأحاول إلقاء نظرة على عطلة نهاية الأسبوع مرة أخرى.
لا مشكلة. لم نتتبع هذا حتى الوصول إلى حل عملي ، وكان علينا الانتقال إلى أشياء أخرى. لذلك في الوقت الحالي ، سنقوم فقط بدمج ملفات .h / .c التي تم إنشاؤها مسبقًا مباشرةً في بنائنا ، بدلاً من المرور عبر آلية CMake الخاصة بـ glad. إذا قمنا بإعادة الزيارة في المستقبل ، فسوف أقوم بتحديث هذه المشكلة.
شكرا مرة أخرى لمساعدتكم.
مرحبا بالجميع.
tysonbrochu ، هل فكرت في تجربة وحدة FetchContent بدلاً من الاستنساخ يدويًا؟
اقتراحي هو إعطائها فرصة. قد يحل المشكلة التي لديك (تسمح لـ CMake بمعالجة كل شيء نيابة عنك). بالإضافة إلى ذلك ، يمكنك إدارة التبعيات الأخرى بنفس الطريقة الموحدة.
CMakeLists.txt
وأضف السطر التالي:add_subdirectory(extern)
extern
في المجلد الجذر للمشروع.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()
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
أفترض أن هذا قد تم حله ، إذا لم تتردد في إعادة فتحه.
التعليق الأكثر فائدة
مرحبا بالجميع.
tysonbrochu ، هل فكرت في تجربة وحدة FetchContent بدلاً من الاستنساخ يدويًا؟
اقتراحي هو إعطائها فرصة. قد يحل المشكلة التي لديك (تسمح لـ CMake بمعالجة كل شيء نيابة عنك). بالإضافة إلى ذلك ، يمكنك إدارة التبعيات الأخرى بنفس الطريقة الموحدة.
CMakeLists.txt
وأضف السطر التالي:add_subdirectory(extern)
extern
في المجلد الجذر للمشروع.extern/CMakeLists.txt
بالمحتوى التالي:glad
كتبعية داخل واحدة منCMakeLists.txt
s كالمعتاد:أتمنى أن يساعدك هذا.