Я просто сам прошел это упражнение, что и привело меня на эту страницу.Ответ Calvin1602 в значительной степени излагает решение, но мне пришлось немного найти синтаксис, чтобы он работал для меня.Вот точные команды, которые наконец-то сработали:
if (WIN32)
set(CMAKE_SHARED_LINKER_FLAGS /MANIFEST:NO)
endif()
add_custom_command(TARGET
odrmanager
POST_BUILD
COMMAND
"mt.exe" -manifest \"${CMAKE_CURRENT_SOURCE_DIR}\\odrmanager.dll.manifest\" -outputresource:\"${CMAKE_CURRENT_BINARY_DIR}\\odrmanager\\odrmanager.dll\"\;\#2
COMMENT
"Adding custom manifest containing MSVCRT80 dependency..."
)
Обратите внимание, что вы должны использовать #1
в команде mt.exe
, когда целью является приложение, и #2
, когда это DLL (по крайней мере,Насколько я понимаю, у меня не получалось, пока я не изменил 1
на 2
).
Также вы можете использовать mt.exe
для извлечения исходного манифеста изDLL, если вы хотите / нужно.Команда выглядит следующим образом:
mt -inputresource:odrmanager.dll;#2 -out:odrmanager.manifest
Нетрудно вручную отредактировать вывод, если у вас есть файл манифеста для зависимости, в которую вы хотите объединить. Но мне нравится трюк Calvin1602 с Visual Studioсделайте это за вас, если вы используете файлы решений Visual Studio, а не nmake.