cmake - 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
命令的任何方法。
解决方案
正如评论中已经说过的那样,systemd
从命令中“使用”(并执行与项目的构建或打包无关的任何事情)是一个非常糟糕的主意install
。该install
命令(偶数SCRIPT
和CODE
签名)旨在用于安装操作,而不是用于任何其他副作用。
正确的做法是使用安装后脚本生成本机包 (DEB/RPM),使用系统提供的宏(如此处所述),您可以正确安装包。查看CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
提供包安装操作的方式。
另一件坏事是使用硬编码路径 ( /usr/bin/
)。顺便说一句,对于我建议的(纯)守护程序应用程序来说,这是一个更好的地方/usr/sbin/
。查看GNUInstallDirs
带有 CMake 的模块以获取更多参考。
推荐阅读
- javascript - 如何避免使用 Yarn 在 monorepo 中安装软件包
- android - 尝试使用 Apple MusicKit SDK 进行身份验证时出现 USER_CANCELLED 令牌错误
- java - 通过使用弹簧批处理逐行插入数据来修复列表大小问题
- twitter-bootstrap - Yarn 自定义 Bootstrap 安装 config.json
- css - 设置与其他 div 相同的高度,不使用 javascript,并且在 flexbox 内
- prometheus - 带有前缀的所有普罗米修斯指标的 Grafana 变量
- java - DownloadManager 在 Android Q 上不起作用 - Android/Java
- python - 如何提高图像分类器的准确性?
- kotlin - 你如何解决 Kotlin 中的循环导入
- python-3.x - How to get indices of drag and drop in PyQt5