У меня есть проект C++ Visual Studio, который зависит от некоторых ресурсов (.glsl файлов).
В настоящее время мне приходится копировать и вставлять каталоги ресурсов каждый раз, когда я создаю проект, но это довольно неудобно.
Я хотел бы знать, есть ли способ заставить процесс сборки автоматически включать файлы ресурсов помимо сгенерированных .exe. Если бы кто-нибудь мог также предоставить некоторые ссылки, я был бы признателен, учитывая, что я ничего не могу найти в Интернете.
Структура проекта следующая:
root
|
+-- resources
| |
| +- shaders
| |
| +- shader files (.glsl)
|
+- src files (.cpp/.h)
Текущий результат после сборки релиза:
Release
|
+- .exe
+- .pdb
+- DLLs
Желаемый результат:
Release
|
+-- resources
| |
| +- shaders
| |
| +- shader files (.glsl)
|
+- .exe
+- .pdb
+- DLLs
Как предложил Minxin Yu - MSFT, я попытался использовать события после сборки с помощью следующей команды:
PowerShell Copy-Item -Path $(SolutionDir)$(ProjectName)\resources -Destination $(SolutionDir)x64\Release\ -Recurse
Но сборка завершается со следующей ошибкой:
Build started...
1>------ Build started: Project: 02es, Configuration: Release x64 ------
1>Copy-Item : Impossibile trovare un parametro posizionale che accetta l'argomento
1>'Righi\Programmi\GitHub\Fondamenti-di-Computer-Graphics-M\laboratorio\02es\resources'.
1>In riga:1 car:1
1>+ Copy-Item -Path D:\Michele Righi\Programmi\GitHub\Fondamenti-di-Compu ...
1>+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1> + CategoryInfo : InvalidArgument: (:) [Copy-Item], ParameterBindingException
1> + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
1>
1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: The command "PowerShell Copy-Item -Path D:\Michele Righi\Programmi\GitHub\Fondamenti-di-Computer-Graphics-M\laboratorio\02es\resources -Destination D:\Michele Righi\Programmi\GitHub\Fondamenti-di-Computer-Graphics-M\laboratorio\x64\Release\ -Recurse
1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: :VCEnd" exited with code 1.
1>Done building project "02es.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build started at 9:23 AM and took 02,321 seconds ==========
@ MinxinYu-MSFT Привет, извините за задержку и еще раз спасибо за терпение и помощь, я обновил вопрос с ошибкой, которую я получаю при использовании предложенной вами команды. Я уже пробовал это до использования robocopy, но забыл обновить ветку. Дайте мне знать, если вы хотите узнать подробности
Эта проблема вызвана пробелами в пути. Я буду продолжать искать решение.





Добавьте событие после сборки в событиях сборки свойств проекта.
Например.
PowerShell Copy-Item -Path $(SolutionDir)$(ProjectName)\resources -Destination $(SolutionDir)x64\Release\ -Recurse
Обновлять: Для пути с пробелами объедините "" и ''
PowerShell Copy-Item "-Path '$(SolutionDir)$(ProjectName)\resources' -Destination '$(SolutionDir)x64\Release\' -Recurse"
Спасибо за предложение, я пробовал использовать robocopy: robocopy "$(SolutionDir)$(ProjectName)\resources" "$(SolutionDir)x64\Release\resources" /s /e и ресурсы копируются правильно, но сборка завершается с ошибкой MSB3073: :VCEnd exited with code 1
Привет, @ mikyll98 Я протестировал robocopy, и, похоже, он плохо работает с событиями сборки. (протестирован тот же код в командной строке и Visual Studio). Пожалуйста, рассмотрите возможность использования предоставленного сценария PowerShell
Привет, твоя проблема решена? PowerShell работает?