I am using cmake version 3.25.1.
When I run vcmi_client.exe in the debug directory I get the following errors:
Not found SDL2_mixer.dll and SDL2.dll
All other .exes crash with ‘abort() has been called’ error.
There is no MSB3073 error in the release build.
.exe run, but immediately crash with an error.
I think I found a mistake.
There is such a text in the build logs (INSTALL. log) .
Cmake Error at cmake_install.cmake:37 (file) :
file cannot create directory :C:/Program Files/VCMI… Maybe need administrative privileges.
but which directory is it trying to create there? The install location is essentially read-only for VCMI. The “editable” place is under user directory.
oh, or are you building inside Program Files? That’s definitely a bad choice
editing the generated vcxproj is a workaround at best and most probably can be done by adjusting CMakeLists.txt, I suggest to find the source of the issue.
cannot create directory :C:/Program Files/VCMI
it’s still unclear what is trying to reference VCMI in PF and why.
tbh currently looks like a local environment issue.
1)Note open:
D:\Program Files\Microsoft Visual Studio 2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets
2)Comment out the line
I made a mistake.
Хорошо, я напишу по-русски все проблемы. У меня стоят две версии Microsoft Visual studio 2019 и Microsoft Visual studio 2022.
Через CMake по инструкции я собираю готовый проект, указываю генератор Visual Studio 19. Все собирается отлично без ошибок. Проблемы начинаются, когда я пытаюсь стартануть проект под Visual studio в режиме Debug. Проект собирается нормально, но не стартует - выдает ошибку ‘MSB3073’. Она видна на скриншоте выше. В режиме Release таких проблем нету, проект запускается без всяких ошибок.
Я нашел обходной путь для решения этой проблемы, закомментировал строчку Microsoft.CppCommon.targets в MSBuildMicrosoft, все стартует под Debug корректно но она ЛОМАЕТ систему сборки. То есть, собрать что-то CMake уже не получиться - выдаст ошибку. Этот не самый лучший вариант.
Еще одна проблема возникает, когда я запускаю готовый собранный debug-проект (не из под IDE). При запуске любого сценария, выпадает ошибка “Cannot open dynamic library (.\AI\VCAI.dll). Throwing…”
То есть, судя по всему отладчик не видит DLL. Повторюсь в релизной сборке таких проблем нету, только в дебаге.
Я почитал форумы, пишут что нужно указать переменную PATH к dll-кам в настройках отладчика, но у меня пока это не получается.
Можно конечно плюнуть на debug сборку и собирать все под release, но что-то мне подсказывает это не совсем правильно.
Вроде пока все.
Просто когда я читал гайд по сборке я особо не задумывался, что в 22 можно добавить toolset от 19-й. Да и не знал я, что так можно сделать, по этому пришлось еще ставить 19 студию. Для меня это было бы проще и быстрее по времени, чем разбираться в настройках.
Попробую запустить дебаг просто так, посмотрю что получиться.
" и все же я до сих пор не понимаю с чего вдруг что-то пытается создать папку C:/Program Files/VCMI… ". Возможно это я что-то химичил с путями, пока пытался решить проблему. По этому лучше не заострять на этом внимание, данную ошибку я больше не видел.
C:/Program Files/VCMI - probably you debug INSTALL and it tries to install VCMI and by default it does install to C:/Program Files/VCMI. You could try to open the solution using File/Open/Cmake… and open root CMakeList.txt. It will generate solution itself. Settings it wil ltake from CMakePresets.json. Not official way from our side but this is how Microsoft wants and should be less problematic. INSTALL is better debuggable because it will put all required dlls to the output dir while regular build may skip some
2)При установке visual studio toolset 19 в visual studio 22 при сборке через cmd он ее в упор не видит. Пишет “could not find any instance of Visual Studio 19”. Что я делаю не так?
Не могу сказать как оно там работает, всегда собирал с msvc через командную строку.
Тут наверное лучше всего почитать документацию к cmake интеграции в VS.