У меня есть библиотека C++, которую я хочу скомпилировать с помощью Visual Studio 2017 (CMake/Ninja) с параметром компилятора /MT в режиме выпуска. Здесь я задавал аналогичный вопрос некоторое время назад. Ответ на этот вопрос помог, но заставляет компилятор жаловаться (выдавать предупреждение) о переопределении /MD с помощью /MT. Затем я использовал это решение, но установка CMAKE_CXX_FLAGS_RELEASE не влияет на аргументы командной строки компилятора в режиме выпуска. Я имею в виду, что следующий код хорошо работает в режиме отладки:
set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE)
foreach(CompilerFlag ${CompilerFlags})
message("before replace: " ${${CompilerFlag}})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
message("after replace: " ${${CompilerFlag}})
endforeach()
Результатом запуска CMake будет:
before replace: /DWIN32 /D_WINDOWS /W3 /GR /EHsc
after replace: /DWIN32 /D_WINDOWS /W3 /GR /EHsc
before replace: /MDd /Zi /Ob0 /Od /RTC1
after replace: /MTd /Zi /Ob0 /Od /RTC1
before replace: /MD /O2 /Ob2 /DNDEBUG
after replace: /MT /O2 /Ob2 /DNDEBUG
Результатом сборки будет:
cl.exe ... /MTd ...
В режиме Release результат запуска CMake будет таким же; однако результатом сборки будет:
cl.exe ... /MD ...
Если вы знаете, как правильно это сделать, я буду очень признателен, если вы это услышите.