Soit le fichier "shader.cl" à inclure. ====Windows==== ===Création de la ressource=== Créer une ressource dans Visual Studio. Aller dans le menu ''Project'' > ''Add new Item%%...%%''. Cliquer sur ''Show All Templates'' et sélectionner ''Visual C++'' > ''Resource'' > ''Resource File (.rc)'' et donner lui un nom de fichier ''Resource.rc''. {{:lang:c:embed:embed1.png?335|}} {{:lang:c:embed:embed2.png?786|}} {{:lang:c:embed:embed3.png?370|}} Ce fichier va contenir les liens vers toutes les futures ressources. Aller dans le menu ''Project'' > ''Add Resource%%...%%''. Cliquer sur ''Custom...'' et indiquer un nom (quelconque), ''DATA'' ici. Dans le gestionnaire de ressources, il suffit alors de lui donner le nom que l'on souhaite ainsi que son identifiant. Le fichier se créera tout seul au moment de l'enregistrement du projet. {{:lang:c:embed:embed4.png?335|}} {{:lang:c:embed:embed5.png?422|}} {{:lang:c:embed:embed6.png?300|}} {{:lang:c:embed:embed7.png?555|}} {{:lang:c:embed:embed8.png?363|}} Il suffit alors d'ajouter le fichier ''Resource.rc'' dans ''CMakeLists.txt'' de la même façon qu'un fichier ''.cpp'' au code source de l'application / librairie. add_executable(app WIN32 ... Resource.rc) [[https://learn.microsoft.com/en-us/cpp/windows/how-to-create-a-resource-script-file?view=msvc-170|How to: Create Resources (C++)]] {{ :lang:c:embed:how_to_create_resources_c_microsoft_learn_22_05_2023_17_09_21_.html |Archive du 05/11/2021 le 22/05/2023}} [[https://mklimenko.github.io/english/2018/06/23/embed-resources-msvc/|Embed resources in C++ on Windows (Visual Studio)]] {{ :lang:c:embed:embed_resources_in_c_on_windows_visual_studio_gnss_c_solutions_22_05_2023_17_09_18_.html |Archive du 23/06/2018 le 22/05/2023}} ===Récupération des données=== Il faudra utiliser le nom de la ressource définie dans Visual Studio (ici ''IDR_DATA1'' et accessible depuis le fichier ''resource.h''). #include "resource.h" HRSRC hRes = FindResource(nullptr, MAKEINTRESOURCEA(IDR_DATA1), "DATA"); HGLOBAL hData = LoadResource(nullptr, hRes); DWORD hSize = SizeofResource(nullptr, hRes); char* hFinal = (char*)LockResource(hData); std::string kernel; kernel.assign(hFinal, hSize); return kernel; ====Linux==== ===Création de la ressource=== La ressource existe déjà sous forme d'un fichier. Générer sa version C via l'outil ''xxd''. set(RESOURCE_COMPILER xxd) set(COMPILED_RESOURCES shader.cl) foreach(INPUT_FILE ${COMPILED_RESOURCES}) set(OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${INPUT_FILE}.h) add_custom_command( OUTPUT ${OUTPUT_FILE} COMMAND ${RESOURCE_COMPILER} -i ${INPUT_FILE} ${OUTPUT_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Compiling ${INPUT_FILE} to binary") list(APPEND APP_XXD "${OUTPUT_FILE}") endforeach() add_executable(app WIN32 ... ${APP_XXD}) ===Récupération des données=== L'utilisation d'un fichier header est plus simple à utiliser même s'il peut ralentir la compilation s'il fait plusieurs Mo. Il faut juste adapter le nom des variables en fonction de celui attribué à ''xxd''. #include "resource.h" #include #include std::map res_map = { {IDR_DATA1, {reinterpret_cast(shader_cl)}}}; return kernel_map[IDR_DATA1];