Как создать библиотеку MTd lib для библиотеки формата fmt?

#cmake #fmt

Вопрос:

Я пытаюсь использовать здесь следующую библиотеку: https://github.com/fmtlib/fmt

Он строится нормально, используя предоставленный файл cmake.

Но как часть сборки он генерирует fmtd.файл lib, который по умолчанию имеет формат динамической библиотеки MD.

Мне нужно перестроить его, чтобы он был статической отладочной библиотекой MTd.

Я попытался изменить CmakeLists.txt файл со следующими настройками:

 if (MSVC)
  set(PEDANTIC_COMPILE_FLAGS /W3 /MTd)
  set(WERROR_FLAG /WX)
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
endif ()
 

что, похоже, не сработало.

Есть идеи о том, как изменить его, чтобы он создавал правильную версию fmtd.lib?

Ответ №1:

Вы должны быть в состоянии сделать это с помощью переменной CMAKE_MSVC_RUNTIME_LIBRARY CMake:

 cmake -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug ...
 

Комментарии:

1. Спасибо. Это действительно сработало. Но теперь я в замешательстве, у меня 41 ошибка компиляции с правильным . lib и 19 с /MDd. Ошибки выглядят следующим образом: ` Обнаружено несоответствие LNK2038 для библиотеки RuntimeLibrary: значение «MDd_DynamicDebug» не соответствует значению ` MTd_StaticDebug «в файле main.obj vcruntime140 vcruntime140fmtd.lib(формат.obj)» с /MDd

2. Вышеизложенное является правильным ответом. Кажется, что можно перестроить подпроект fmt отдельно от остальной части решения, как только CMake закончит работу. И четко указать /MTd для этой компиляции.