为什么要在每个项目包配置之后包含include(CPack)?

时间:2019-04-26 12:16:21

标签: c++ cmake cpack

我正在尝试CPack的{​​{1}}模块,并且出现了一些令人困惑的行为。我有CMake包含在根CpackMylib.cmake中。它看起来如下:

CMakeLists.txt

运行include(CPack) #included on top install (TARGETS mylib LIBRARY DESTINATION /usr/lib COMPONENT mylib-all ) install (DIRECTORY include/ DESTINATION /usr/include/mylib COMPONENT mylib-all) set(CPACK_PACKAGE_NAME "mylib") set(CPACK_GENERATOR "DEB") 时,它无法使用以下跟踪信息创建软件包:

make package

看起来它只是忽略了我放在Run CPack packaging tool... CPack: Create package using STGZ CPack: Install projects CPack: - Run preinstall target for: mylib CPack: - Install project: mylib CMake Error at /home/krjoff/mylib/cmake_install.cmake:55 (file): file INSTALL cannot copy file "/home/krjoff/mylib/libmylib.so" to "/usr/lib/mylib.so". CMake Error at /home/krjoff/mylib/cmake_install.cmake:73 (file): file INSTALL cannot set permissions on "/usr/include/mylib" CPack Error: Error when generating package: mylib Makefile:129: recipe for target 'package' failed make: *** [package] Error 1 之后的所有变量,并试图构建一些include(CPack)软件包并立即安装。但是,如果在完成所有配置后将STGZ放在include(CPack)的末尾,它就可以正常工作。

有人可以解释为什么在所有配置设置之后都必须放置CpackMylib.cmake吗?

1 个答案:

答案 0 :(得分:1)

CPack应该是这样工作的。当您在include中对其进行CMakeLists.txt时,它会读取its documentation中列出的所有变量,例如CPACK_GENERATORCPACK_PACKAGE_NAME并为您创建package目标然后致电make package

如果在设置这些变量之前将其包括在内,则它们的值将被忽略。

  

在您的CPack文件中包含此CMakeLists.txt模块之前,可以设置各种变量来定制生成的安装程序。最常用的变量是:

     
      
  • CPACK_PACKAGE_NAME
      程序包(或应用程序)的名称。如果未指定,则默认为项目名称。

  •   
  • CPACK_PACKAGE_VENDOR
      包供应商的名称。 (例如“ Kitware”)。默认值为“人类”。

  •   
  • CPACK_PACKAGE_DIRECTORY
      CPack正在打包的目录。如果未设置,则默认为(内部)构建目录。可以在CPack配置文件中或从cpack命令行选项-B中定义此变量。如果设置,则命令行选项将覆盖在配置文件中找到的值。

  •   
  • ...

  •   

来源:CPack --- CMake