CMake-如何在打包期间阻止执行安装脚本?

CMake-如何在打包期间阻止执行安装脚本?,cmake,cpack,Cmake,Cpack,我的CMakeLists.txt文件包含命令,应该由makeinstall执行,所有这些都可以正常工作。下面的示例是我实际的CMake文件(TM00.01.CPP这里内容不重要——可能是任何C++程序): 我看到消息命令也是由makepackage执行的,这不是我想要的 如何通过makepackage命令告诉CMake不要执行安装脚本?我找不到任何方法使用CMakeif命令来实现这一点。正如它在评论中所说的,从install命令中“使用w/systemd”(并执行与项目的构建或打包无关的操作)是

我的
CMakeLists.txt
文件包含命令,应该由
makeinstall
执行,所有这些都可以正常工作。下面的示例是我实际的CMake文件(TM00.01.CPP这里内容不重要——可能是任何C++程序):

我看到
消息
命令也是由
makepackage
执行的,这不是我想要的


如何通过
makepackage
命令告诉CMake不要执行安装脚本?我找不到任何方法使用CMake
if
命令来实现这一点。

正如它在评论中所说的,从
install
命令中“使用w/
systemd
”(并执行与项目的构建或打包无关的操作)是一个非常糟糕的主意。
install
命令(甚至
SCRIPT
code
签名)用于安装操作,而不用于任何其他副作用

正确的方法是生成一个带有安装后脚本的本机软件包(DEB/RPM),使用系统提供的宏(如所述),可以正确安装软件包。查看提供包安装操作的方法


另一个缺点是使用硬编码路径(
/usr/bin/
)。顺便说一句,我建议(纯)守护程序应用程序的更好位置是
/usr/sbin/
。查看带有CMake的模块以获取更多参考。

正如评论中所说的,使用
安装
命令“使用/code>systemd
”(并执行与项目的构建或打包无关的操作)是一个极坏的主意。
install
命令(甚至
SCRIPT
code
签名)用于安装操作,而不用于任何其他副作用

正确的方法是生成一个带有安装后脚本的本机软件包(DEB/RPM),使用系统提供的宏(如所述),可以正确安装软件包。查看提供包安装操作的方法


另一个缺点是使用硬编码路径(
/usr/bin/
)。顺便说一句,我建议(纯)守护程序应用程序的更好位置是
/usr/sbin/
。请看一看带有CMake的模块,以获取更多参考。

我在回答我自己的问题,因为现有的答案没有解决我的主要问题。我找不到任何方法(在CMake级别)阻止
install
命令在
make package
期间运行-此命令甚至调用
postinst
脚本

幸运的是,我可以修改
postinst
脚本本身,以防它被称为而不是被dpkg调用:

if [ -z ${DPKG_ADMINDIR} ]; then
  echo "postinst: missing 'dpkg' environment (not an error during packaging)"
  exit 0
fi

这当然是一个技巧,但对我来说很有效。

我在回答我自己的问题,因为现有的答案没有解决我的主要问题。我找不到任何方法(在CMake级别)阻止
install
命令在
make package
期间运行-此命令甚至调用
postinst
脚本

幸运的是,我可以修改
postinst
脚本本身,以防它被称为而不是被dpkg调用:

if [ -z ${DPKG_ADMINDIR} ]; then
  echo "postinst: missing 'dpkg' environment (not an error during packaging)"
  exit 0
fi

这当然是一个技巧,但对我来说很有效。

我所做的是将带有代码/脚本的安装命令指定为单独的组件,例如install(代码…组件后安装)

然后还添加了其他非代码安装命令作为不同的组件,例如安装(文件…组件文件安装)

然后需要将CPack配置为仅打包文件安装组件(可以很容易地找到解决方案-提示:在一个包中使用CPack\u COMPONENTS\u ALL\u、CPack\u COMPONENTS\u ALL和CPack\u(RPM/DEB/…)\u component\u install变量)


当然,在安装软件包的过程中,生成的软件包将不会运行这些代码组件-它们需要作为安装后脚本单独添加。

我所做的是将带有代码/脚本的安装命令指定为单独的组件,例如安装(代码…组件安装后)

然后还添加了其他非代码安装命令作为不同的组件,例如安装(文件…组件文件安装)

然后需要将CPack配置为仅打包文件安装组件(可以很容易地找到解决方案-提示:在一个包中使用CPack\u COMPONENTS\u ALL\u、CPack\u COMPONENTS\u ALL和CPack\u(RPM/DEB/…)\u component\u install变量)


当然,在安装软件包期间,生成的软件包不会运行这些代码组件-它们需要作为安装后脚本单独添加。

您能否提供一个最小的CMakeLists.txt来重现问题?@compor-完成,感谢从包装商的角度来看,我认为在安装软件包时更改系统的状态是个坏主意。也许可以添加一条消息,让管理员重新启动守护程序。您能提供一个最小的
CMakeLists.txt
来重现问题吗?@compor-done,谢谢从打包程序的角度来看,我认为在安装包时更改系统状态是个坏主意。也许可以添加一条消息,让管理员重新启动守护进程。我只是问了一下CMake,调用
systemctl
就是一个例子。实际上,我在安装过程中通过
cmake
dpkg
做了很多事情,但我不想在包装过程中做这些事情。如果CMake做不到,这是CMake的问题,但不是我的问题。
/usr/bin
目录用法也是一个例子,我可以使用任何其他目录。重点是不要做任何与CMake配置的构建或打包过程无关的事情。将大量不同的内容移动到som