吾乃小白,奈何坑吾至深。
要搞清楚怎么用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打包,则不会报错,而是打个空包。
以上。