cmake - cmake:“make install”和“make package”之间的区别
问题描述
我正在使用 CMake 生成我的 makefile。我的可部署目标是 RPM,这一切都运行良好。根据文件系统指南,我的 RPM 安装到
/opt/mytool
/bin - executables
/lib64 - libraries
/etc/opt/mytool - configuration files
RPM 由 CPack 使用make package
在开发测试期间,我不想安装 RPM。它需要提升权限,并将任何给定机器一次限制为一个(开发人员)版本。在我让所有 RPM 工作正常之前,我能够“进行安装”并创建一个install
像这样的简单树:
install
/opt/mytool
bin
lib64
但是,将配置文件引入不同的位置已经使工作变得混乱。我希望将其扩展到包括
install
/etc/opt/mytool
但我可以没有它。不幸的是,当我尝试时,make install
我得到了这个错误:
Install the project...
-- Install configuration: "Debug"
CMake Error at cmake_install.cmake:49 (file):
file cannot create directory: /etc/opt/mytool. Maybe need administrative
privileges.
该CMakeLists.txt
文件的违规部分是
install(FILES ${PROJECT_SOURCE_DIR}/../Config/mytool.cfg
DESTINATION /etc/opt/mytool
)
我查看了CMake rpm 在 /etc/init.d 中安装文件,但我的 RPM 构建得很好(而且我正在使用 CMake 3)
make install
和之间有什么区别make package
(我可以推断后者正在运行 CPack,它工作得很好)?如何创建开发安装树
解决方案
两个构建目标之间的区别在于,package
在您的情况下创建一个 RPM 文件,同时install
将提供给命令的资源复制到install()
提供给DESTINATION
参数的位置:
目的地
指定要安装文件的磁盘目录。如果给出完整路径(带有前导斜杠或驱动器号),则直接使用它。如果给出了相对路径,则相对于CMAKE_INSTALL_PREFIX 变量的值进行解释。可以使用CMAKE_INSTALL_PREFIX变量文档中解释的 DESTDIR 机制在安装时重新定位前缀。
您指定复制/etc/opt/mytool
您显然没有写入权限的文件并遇到引用的错误。
你有两个选项来解决这个问题,第二个显然是首选,因为它允许每个开发人员提供他们自己的系统本地设置,临时安装开发文件的位置:
- 设置
DESTINATION
您具有写入权限的路径 - 设置相对路径并
cmake
使用附加参数调用以指定开发安装树的位置:
cmake -H<source path> -B<build path> -DCMAKE_INSTALL_PREFIX=<install path>
推荐阅读
- monaco-editor - 如何在 monaco-editor 中手动创建文本模型实例?
- firebase - 如何以 excel 或 CSV 格式查询 Firebase Firestore(非实时数据库)集合和检索数据
- php - Laravel - 上传图片 404
- bash - 传递命令以在函数中执行
- logging - 有没有办法快速清除 MarkLogic 中的服务器错误日志?
- java - 我可以使用 GLFW 确定操纵杆的品牌和型号吗?
- rust - Rust 如何尊重 Copy 特征?
- javascript - 与 CryptoJS 相同的 openssl_encrypt 加密方法
- java - 从csv文件中逐行读取
- matlab - MatLab 并行工具箱:以核心分工