首页 > 解决方案 > CMake - 如何在打包期间阻止执行安装脚本?

问题描述

我的CMakeLists.txt文件包含应该由 执行的命令make install,并且所有这些都可以正常工作。下面的示例CMakeLists.txt是我实际 CMake 文件的简短摘录(tm0001.cpp内容在这里并不重要 - 它可能是任何 C++ 程序):

cmake_minimum_required(VERSION 3.12)

project(tm0001)

set(CMAKE_CXX_STANDARD 11)
add_executable(${PROJECT_NAME} tm0001.cpp)

install(
  TARGETS ${PROJECT_NAME}
  DESTINATION /usr/local/bin
  PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)

install(CODE "message(\"-- This must be called during installation only\")")

set(CPACK_PACKAGE_CONTACT "HEKTO")
set(CPACK_GENERATOR "DEB")
include(CPack)

我看到message命令也被执行make package,这不是我想要的。

如何通过命令告诉CMake不要执行安装脚本make package?我找不到使用 CMakeif命令的任何方法。

标签: cmakecpack

解决方案


正如评论中已经说过的那样,systemd从命令中“使用”(并执行与项目的构建或打包无关的任何事情)是一个非常糟糕的主意install。该install命令(偶数SCRIPTCODE签名)旨在用于安装操作,而不是用于任何其他副作用

正确的做法是使用安装后脚本生成本机包 (DEB/RPM),使用系统提供的宏(如此所述),您可以正确安装包。查看CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA提供包安装操作的方式。

另一件坏事是使用硬编码路径 ( /usr/bin/)。顺便说一句,对于我建议的(纯)守护程序应用程序来说,这是一个更好的地方/usr/sbin/。查看GNUInstallDirs带有 CMake 的模块以获取更多参考。


推荐阅读