cmake:“ make install”和“ make package”之间的区别

时间:2019-04-11 23:47:38

标签: cmake

我正在使用CMake生成我的makefile。我的可部署目标是RPM,并且一切正常。根据文件系统准则,我的RPM安装到

/opt/mytool
    /bin - executables
    /lib64 - libraries
/etc/opt/mytool - configuration files

CPM使用make package

构建RPM

在开发测试期间,我不想安装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 installing a file in /etc/init.d,但是我的RPM构建良好(并且我正在使用CMake 3)

make installmake package之间有什么区别(我可以推断出后者正在运行CPack,并且可以正常工作)?如何创建开发安装树

1 个答案:

答案 0 :(得分:0)

两个构建目标之间的区别在于,package在您的情况下创建了一个RPM文件,而install将提供给install()命令的资源复制到提供给{{ 1}}参数:

  

目的地

     

指定文件将在磁盘上的目录   已安装。如果完整路径(带斜杠或驱动器号)   给定它直接使用。如果给出相对路径,则为   相对于CMAKE_INSTALL_PREFIX的值进行解释   变量。可以在安装时使用   CMAKE_INSTALL_PREFIX变量中说明了DESTDIR机制   文档。

您指定将文件复制到DESTINATION,您显然没有权限,并且遇到引用的错误。

您有两种方法可以解决此问题,第二种方法显然是首选,因为它允许每个开发人员提供他们自己的系统本地设置,用于在其中临时安装开发文件:

  • 设置一个您拥有写权限的/etc/opt/mytool路径
  • 设置相对路径,并使用附加参数调用DESTINATION以指定开发安装树的位置:
cmake