Я использовал cmake 3.12.0. Существует один проект cmake, который создает одно консольное приложение. Я добавляю в этот проект cmake возможность генерации пакетов:
# ... above cmake code for one console application creation
# below code that I add:
# pack
set (A_PACK_DESCRIPTION_SUMMARY "${PROJECT_NAME} - CMake Assistant Solution")
set (A_INSTALL_PREFIX Consolas)
set(CPACK_WIX_PRODUCT_GUID "F9AAAAE2-D6AF-4EA4-BF46-B3E265400CC8")
set(CPACK_WIX_UPGRADE_GUID "F9AAAAE2-D6AF-4EA4-BF46-B3E265400CC7")
set(CPACK_GENERATOR "WIX")
include(CPack)
С другими генераторами (NSIS, 7Z, ZIP, DEB) все работает нормально, но с WIX появляется следующая ошибка:
...path\files.wxs(11) : error LGHT0091 : Duplicate symbol 'Component:CM_C_EMPTY_INSTALL_ROOT' found. This typically means that an Id is duplicated. Check to make sure all your identifiers of a given type (File, Component, Feature) are unique.
Почему это происходит и как это исправить?





Если это помогает, у меня была эта проблема, и я обнаружил, что у меня есть команды INSTALL, в которых указаны только конфигурации выпуска, но затем я пытался собрать пакет, используя конфигурацию сборки отладки. Просто переключившись на сборку пакета с указанием конфигурации выпуска, все прошло так, как ожидалось (потратил большую часть дня, прежде чем я это понял!)
Похоже, это вызвано эта ошибка
Обычно вы используете add_subdirectory(xxx EXCLUDE_FROM_ALL), где в подкаталоге есть вызов install(... COMPONENT ...). Установленные файлы исключаются из подкаталога, но по-прежнему создаются файлы COMPONENT, которые теперь пусты и нарушают работу wix.
В качестве обходного пути вы можете добавить:
set(CPACK_COMPONENTS_ALL Unspecified)
в CMakeLists.txt, чтобы исключить все пустые компоненты.
Я проверяю этот, но он использовал версию скрипта конфигурации Release для всех действий (сборка, тест, упаковка).