CPack小白上手

吾乃小白,奈何坑吾至深。

要搞清楚怎么用CPack,花了两天的时间。搜到的大多资料都讲如何用。但是很少解决我的问题。

今日搞定,列举一二,以备遗忘。


 

1. CPack是安装CMake时集成安装的工具。

2. CPack只是个打包工具,你让它把啥打包,它就打包啥,你不告诉它,它就给你打个空包,或者报错。

3. CPack的打包流程是,

先在诸如“cmake-build-debug\_CPack_Packages\win64\NSIS\App-1.0.0-win64”的文件夹下面安装一遍程序。

然后再对这个目录进行打包,所以...

  3.1 一定要在CMakeLists.txt中写install告诉脚本你要安装啥

  3.2 写install的时候一定要写相对路径,不然这个临时目录就是个空


 

搞清楚以上几点后,在结合搜到的帖子,就基本可以完成CPack自动打包了。

参考链接:

install的使用: 

https://www.cnblogs.com/coderfenghc/archive/2012/08/12/2627561.html 

#安装编译的文件
install(TARGETS ${PROJECT_NAME}
        RUNTIME DESTINATION "bin" )

#拷贝目录下所有文件至安装目录
install(DIRECTORY "${PROJECT_SOURCE_DIR}/lib/"
        DESTINATION "bin"
        )

#拷贝单个文件至安装目录
install(FILES
        "${PROJECT_SOURCE_DIR}/Readme.txt"
        "${PROJECT_SOURCE_DIR}/License.txt"
        DESTINATION "bin")

为什么CPack会生成一个空包?(因为没有在CMakeLists中配置install)

https://stackoom.com/question/3Uv1w/%E4%B8%BA%E4%BB%80%E4%B9%88CPack%E4%BC%9A%E7%94%9F%E6%88%90%E4%B8%80%E4%B8%AA%E7%A9%BA%E5%8C%85 

CPack的官方详细说明 (丫的居然不放一个带install的例子。。。)

https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Packaging-With-CPack

 


 

报错描述

为了能搜索到本帖解决方案,特贴出之前碰到的错误信息。如下

$ cpack -C CPackConfig.cmake
CPack: Create package using NSIS
CPack: Install projects
CPack: - Run preinstall target for: myApp
CPack: - Install project: myApp [CPackConfig.cmake]
CPack: Create package
CPack Error: Problem running NSIS command: "C:/Program Files (x86)/NSIS/makensis.exe" "D:/myApp/cmake-build-debug/pack/_CPack_Packages/win64/NSIS/project.nsi"
Please check D:/myApp/cmake-build-debug/pack/_CPack_Packages/win64/NSIS/NSISOutput.log for errors
CPack Error: Problem compressing the directory
CPack Error: Error when generating package: myApp

以上信息的具体NSISOutput.log定位如下

Error in script "D:/myApp/cmake-build-debug/pack/_CPack_Packages/win64/NSIS/project.nsi" on line 646 -- aborting creation process

project.nsi的第646行如下

Section "-Core installation"
  ;Use the entire tree produced by the INSTALL target.  Keep the
  ;list of directories here in sync with the RMDir commands below.
  SetOutPath "$INSTDIR"
  
  File /r "${INST_DIR}\*.*"    ; <<<<<第646行

  ;Store installation folder

以上报错原因:

*没有在CMakeLists中配置install,导致临时打包目录为空。

*使用NSIS打包时,会报如上错误,如果使用ZIP打包,则不会报错,而是打个空包。

以上。

 

posted @ 2020-12-22 19:26  No5Meters  阅读(2025)  评论(0编辑  收藏  举报