7

我有一个项目(带有子项目),我想为其生成多个 NSIS 安装程序可执行文件,而不是在单个 NSIS 安装程序中列出多个组件。这可能吗?还是我需要将我的代码组织到单独的项目中?

4

1 回答 1

1

可以提供一个 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()

要为每个 COMPONENT 创建安装程序,您将运行例如:

cmake -COMPONENT=COMPONENT_1 ../
nmake package
cmake -COMPONENT=COMPONENT_2 ../
nmake package
...
cmake -COMPONENT=COMPONENT_X ../
nmake package

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

于 2017-05-30T15:54:41.933 回答