Inno Setup可以和cmake/cpack一起使用吗?

pxy2qtax  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(262)

我正在将我们的一些项目移植到cmake/cpack上,虽然我们目前的东西使用的是Inno Setup,但似乎没有内置的CPack生成器用于Inno Setup。它似乎是zip文件或NSIS。是否有任何CPack发电机在那里使用Inno设置(如果有,我在哪里可以找到他们)?如果没有,除了编写脚本并让cmake为其package目标运行之外,还有其他方法可以使用Inno Setup和cmake吗?

eivnm1vs

eivnm1vs1#

这个问题现在已经有10多年的历史了,但对于Inno安装程序用户来说,这是一个好消息。Kitware最近发布了CMake 3.27,它现在包括一个用于Inno Setup的生成器。https://cmake.org/cmake/help/latest/cpack_gen/innosetup.html
我编辑了我的回答,包括一个例子,下面。

  1. [MyProject]
  2. |- Make.bat
  3. |- [source]
  4. |- CMakeLists.txt
  5. |- [hello]
  6. | |- hello.cpp
  7. | |- CMakeLists.txt
  8. |- [installer]
  9. |- CMakeLists.txt
  10. |- config.xml
  11. |- Copyright.txt
  12. |- InstallerIcon.ico
  13. |- InstallerIcon.bmp
  14. |- UninstallIco.ico

make.bat:

  1. md build
  2. cd build
  3. del *.* /S /Q
  4. cmake -G "Visual Studio 17 2022" . "../source" -A x64
  5. rem Firing up Build......................
  6. cmake --build . --config Release
  7. cd..
  8. rem Run CPack
  9. cpack --config build/CPackConfig.cmake

./source.CMakeLists.txt:

  1. cmake_minimum_required(VERSION 3.27)
  2. project(HelloWorld)
  3. add_subdirectory(Hello)
  4. add_subdirectory(Installer)

./hello/hello.cpp:

  1. #include <iostream>
  2. int main ()
  3. {
  4. std::cout << "hello world";
  5. }

./hello/CMakeLists.txt

  1. cmake_minimum_required(VERSION 3.27)
  2. project(Hello)
  3. add_executable(Hello hello.cpp)

./installer/CMakeLists.txt

  1. cmake_minimum_required(VERSION 3.27)
  2. # We tell CMake which files to add the program and the C++ runtime
  3. install(TARGETS Hello DESTINATION .) # Dot means we install directly in target folder, not a subfolder
  4. set (CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE) # override default path of Microsoft libraries
  5. include (InstallRequiredSystemLibraries) # Install Microsoft runtime libraries
  6. install (PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION .) # Override default folder for system libraries.
  7. # Add other files too: installing a config file (just as example, real application will rather use %ProgramData% )
  8. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/Config.xml" DESTINATION .) # Dot sets directly in target folder.
  9. # Generic CPack settings
  10. set(CPACK_PACKAGE_NAME Hello)
  11. set(CPACK_PACKAGE_VENDOR "My Name")
  12. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Hello World Program")
  13. set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) # Name of subfolder under 'Program Files'
  14. set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
  15. set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
  16. set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
  17. set(CPACK_VERBATIM_VARIABLES TRUE) # Ensure correct escaping - always set to true
  18. #Set resources used by the Windows installer
  19. set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt") # Location of license file
  20. set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/InstallIcon.bmp") # Logo in installer window
  21. #Start Menu Shortcuts: executable without .exe and text label
  22. set(CPACK_PACKAGE_EXECUTABLES "Hello" "Hello World")
  23. set(CPACK_CREATE_DESKTOP_LINKS "Hello") # Desktop link
  24. # Define which generator to use
  25. if (WIN32)
  26. # Inno Setup is supported from CMake 3.27.
  27. set(CPACK_GENERATOR INNOSETUP)
  28. set(CPACK_INNOSETUP_SETUP_UninstallDisplayIcon "${CMAKE_CURRENT_SOURCE_DIR}/UninstallIco.ico")
  29. set(CPACK_INNOSETUP_SETUP_SetupIconFile "${CMAKE_CURRENT_SOURCE_DIR}/InstallerIcon.ico")
  30. #Executable that user can run at end of install. It refers CPACK_PACKAGE_EXECUTABLES above.
  31. set ( CPACK_INNOSETUP_RUN_EXECUTABLES "Hello")
  32. # OPTIONAL: Set up custom script for Inno Setup. Your Pascal functions to add in [code] block
  33. # set (CPACK_INNOSETUP_CODE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/codefile.iss")
  34. else()
  35. set(CPACK_GENERATOR STGZ )
  36. endif()
  37. # This must always be after all CPACK\_\* variables are defined
  38. include(CPack)

安装文件夹中的其他文件应该是不言自明的:图标,许可文本和配置文件,每个都有你自己的内容,你认为合适的。

展开查看全部

相关问题