CMake/CPack可以为单个项目生成多个NSIS安装程序吗?

Kyl*_*leL 6 windows cmake cpack

我有一个单一的项目(含子项目),为此,我想生成的而不是在一个单一的NSIS安装列出的多个组件的多个NSIS安装可执行文件.这可能吗?或者我是否需要将代码组织到单独的项目中?

DaT*_*oop 2

可以提供一个 CMake 属性,例如COMPONENT可以将其设置为一组预定义的包名称中的值,例如:COMPONENT_1|COMPONENT_2|...COMPONENT_X

包名称甚至可以是不对应于单个组件名称的名称,而是对应于将添加到 CPACK_COMPONENTS_ALL 中的一组组件的名称。如果 COMPONENT 等于 ALL_COMPONENTS,则 CPACK_COMPONENTS_ALL 的值将包含所有可能的组件。

cmake 包装:

if (WIN32)
  set (CPACK_COMPONENTS_ALL ${COMPONENT})
  set (CPACK_PACKAGE_NAME ${COMPONENT})
  set (CPACK_COMPONENT_${COMPONENT}_DISPLAY_NAME "${COMPONENT}")
  set (CPACK_COMPONENT_${COMPONENT}_DESCRIPTION "${COMPONENT}")  
  set (CPACK_NSIS_DISPLAY_NAME "${COMPONENT}")
  set (CPACK_NSIS_PACKAGE_NAME "${COMPONENT}")
  set (CPACK_NSIS_INSTALL_ROOT "C:")
  set (CPACK_GENERATOR NSIS)
else()
  ...
endif()
Run Code Online (Sandbox Code Playgroud)

要为每个组件创建安装程序,您可以运行以下命令:

cmake -DCOMPONENT=COMPONENT_1 ../
nmake package
cmake -DCOMPONENT=COMPONENT_2 ../
nmake package
...
cmake -DCOMPONENT=COMPONENT_X ../
nmake package
Run Code Online (Sandbox Code Playgroud)

请记住,由于二进制文件是在第一次执行时构建的nmake package,因此后续调用cmakenmake package只会重新配置打包,并且仅构建请求的组件(又名组件)