Visual Studio - это система с несколькими конфигурациями. Это означает, что тип сборки выбирается во время сборки, скажем, когда вы используете IDE, вы можете выбрать в это время конфигурацию Release или Debug и сборку. Поэтому, когда вы создаете решение Visual Studio (этап создания проекта или настройки), с cmake -G "Visual Studio ..."
, CMake не имеет значения для CMAKE_BUILD_TYPE
.
Таким образом, вызовы CMake должны отличаться в зависимости от системы. :
В средах с несколькими конфигурациями, таких как Visual Studio, вы используете только 1 папку сборки:
$ mkdir build && cd build # assume we are in the folder containing CMakeLists.txt
$ cmake .. -G "Visual Studio 15 2017 Win64" # Unless building for 32 bits, add the Win64
$ cmake --build . --config Release # Or open IDE, change config to Release and build
$ cmake --build . --config Debug
В средах с одной конфигурацией, таких как g cc с Makefiles, вам нужно использовать 1 папка для каждой конфигурации
$ mkdir build_release && cd build_release # assume we are in the folder containing CMakeLists.txt
$ cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
$ cmake --build .
$ cd .. && mkdir build_debug && cd build_debug
$ cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug
$ cmake --build .
Другой проблемой является определение среды выполнения Visual Studio MT (stati c). Возможно, вы определили в своем профиле Conan compiler.runtime=MT
, или он устанавливается напрямую в файле CMakeLists.txt. Конан не устанавливает такую статическую c библиотеку MT_StaticRelease, она является частью Visual Studio. Если вы пытаетесь статически связать среду Visual Studio, используемые вами профили должны выглядеть так:
# for debug
$ conan install .. -s build_type=Debug -s compiler.runtime=MTd
# for release
$ conan install .. -s build_type=Release -s compiler.runtime=MT