Closed ssvine closed 5 months ago
Обнаружил ещё один баг:
В target_compile_definitions
попадают не только дефайны, но и опции компиляции, которые из-за этого не будут задействованы как опции, что может привести к разным ошибкам (об этом ниже).
Короче говоря, проблема в том, что target_compile_definitions
может содержать только дефайны, а target_compile_options
может содержать и опции, и дефайны.
Обновил пулл реквест, где отдельным коммитом раскидал опции и дефайны по разным директивам.
Проблема с опциями привела к тому, что при компиляции конфигурации Release
в Visual Studio 2022
для платформы x64
получался плагин, который падал при попытке коннекта к серверу.
Плюс ещё один фикс: удаляем флаг /TC
, чтобы компиляция в CI прошла успешно.
Последний штрих: оказалось что DLL
экспортирует огромное количество (471 шт.) ненужных функций fmt
и tinyxml2
. Отключил их экспорт.
Спасибо!
Пулл-реквест содержит следующие исправления.
multi-config
генераторовCMake
, к которым относится генераторVisual Studio
, не подходит использование переменнойCMAKE_BUILD_TYPE
, когда на её значении основывается выбор дебажной или релизной библиотеки:Сейчас, когда я генерирую файлы проекта, в
Visual Studio
разные конфигурации (Debug
,MinSizeRel
,RelWithDebInfo
,Release
) все подключают дебажные версииCRT
:libcmtd.lib
иlibcpmtd.lib
, поэтому все проекты, кромеDebug
не могут скомпоноваться.То же самое будет, если я присвою переменной
CMAKE_BUILD_TYPE
значение, например,RelWithDebInfo
. В этом случае во всех конфигурациях будут подключеныlibcmt.lib
иlibcpmt.lib
, поэтому, в свою очередь,Debug
не сможет скомпоноваться.Фактически то же самое происходит в
add_custom_command
, тут приходится использоватьcmake-generator-expressions
, чтобы разные конфигурации получили правильные пути для копирования.В ucm_add_flags в двух случаях используется добавление флага
/DEBUG
, что приводит к установке переменнойEBUG
. Если я правильно понял, тут имелось в виду, что нужно/DDEBUG
для установки переменнойDEBUG
.Я проверил эти фиксы для
Visual Studio
, но не проверял дляNinja
, которое используется вActions
. По идее, оно должно и там работать ...