Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 如何使用CPACK\u INSTALL\u命令?_Installation_Cmake_Cpack - Fatal编程技术网

Installation 如何使用CPACK\u INSTALL\u命令?

Installation 如何使用CPACK\u INSTALL\u命令?,installation,cmake,cpack,Installation,Cmake,Cpack,我正在使用CPack创建一个Linux-tgz自解压安装程序,我希望安装程序在安装完所有文件后运行一个脚本或一系列命令。CPack文档包含以下指南: CPACK_INSTALL_命令用于安装组件的额外命令 我在CMakeLists.txt文件中设置了这个变量,并且在生成的CPackConfig.cmake文件中看到了它的设置,但是我嵌入到这个变量中的命令不会出现在final.sh安装脚本的任何地方。我遗漏了什么?您没有遗漏任何东西,这根本不是CPACK\u INSTALL\u COMMANDS变

我正在使用CPack创建一个Linux-tgz自解压安装程序,我希望安装程序在安装完所有文件后运行一个脚本或一系列命令。CPack文档包含以下指南:

CPACK_INSTALL_命令用于安装组件的额外命令


我在CMakeLists.txt文件中设置了这个变量,并且在生成的CPackConfig.cmake文件中看到了它的设置,但是我嵌入到这个变量中的命令不会出现在final.sh安装脚本的任何地方。我遗漏了什么?

您没有遗漏任何东西,这根本不是CPACK\u INSTALL\u COMMANDS变量的工作方式

在一个典型的项目中,CPack在一个临时位置执行“makeinstall”,以便基于“makeinstall”树构建最终的安装程序。CPACK_INSTALL_COMMANDS变量旨在为更愿意运行其他命令序列的项目设置,而不是典型的“make INSTALL”命令序列,以生成安装树

因此,CPack应该在生成包时运行您的命令。在最终用户运行生成的安装脚本结束时,它不会在其计算机上运行您的命令

在最终用户安装结束时,有按生成器运行已安装的可执行文件和/或脚本的方法,但这需要您进行一些自定义。在本例中,我建议尝试覆盖输入文件中的CPack.STGZ_Header.sh,该文件在CPack生成STGZ自解压脚本时使用。自定义该文件并将您的呼叫添加到该文件的底部,即行上方:

exit 0
要覆盖该文件,请在源代码树中提供您自己的副本,可能在${CMAKE\u CURRENT\u source\u DIR}/CMAKE目录中,然后在CMakeLists.txt文件中添加:

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH})
(实际上,在我写这篇文章时,我想知道这是否足够,或者在CPack运行时是否还需要设置模块路径……试试这个,让我们知道您的定制是否被CPack使用。如果没有,我将进一步调查,并在这里添加一些建议。)