Зареждане на ресурси/асети при релийс билд
Привет!
Във лекцията видяхме как се зарежда картинка с макрото SDL_LoadBMP(file). Указахме пътя релативно на пътя на binary-то.
Това е окей за девелопмънт, но ако дадем байнърито си на Пешо, като се опита да го пусне, ще му изгърми понеже той няма да има "../assets/helloworld.bmp".
Идвам от Java и Javascript и там практиката е да има стъпка при билдването, която копира ресурсите в релийс папката за да бъдат налични в артефакта. Обикновенно, туулове като Maven ползват конвенции за това къде стоят статичните файлове в един стандартен Джава проект и се грижи да копира файловете в джара.
А в Javascript се копират в папка в директорията на index.html, където са JS и CSS файловете. Тулове като webpack се грижат за това с минимална конфигурация.
Тоест, и в двете билд системи, в папката билд има всичко необходимо за да се "прати на Пешо" приложението и да заработи.
Каква е практиката при C++ приложенията?
Извинявам се за дългия въпрос, дадох всичко от себе си да го поясня :)
P.S. Форума вече не е празен!
Ресурсите се компилират с resource compiler и се добавят към exe-то (или dll). Майкрософтския компилатор (за приложения под Windows) e rc.exe, компилатора на Qt е rcc.exe. И двата са вградени съответно в MS Visual Studio и Qt Creator, но могат да се викат и самостоятелно, от командния ред. Обикновено се вграждат малки по размер ресурси, например икони, курсори, акселератори, менюта и др. Могат да се отделят и в отделна библиотека ако са повече.
Ресурсите на всяко exe или dll могат да се видят с вградения във Visual Studio Resource Editor. Например DependencyWalker (depends.exe) има следните ресурси: Accelerator, "AVI", Bitmap, Dialog, "FILE", Icon, Menu, String Table, Toolbar, Version.
Благодаря, kolioi,
Лично нямам опит с "вграждането" на ресурси с въпросните тулове.
Правил съм нещо подобно като съм include-вал съдържанието на файл директно като масив compile time.
Но това е било единицен случай, с който решавахме конкретен казус.
Както каза, ако ресурсите са по-големи като размер - обикновенно идват в друг файл или библиотека, от която вече се четат в run-time.
Никой не би искал 20 GB binary (.exe) :)
Поздрави