【发布时间】:2021-09-12 09:27:04
【问题描述】:
假设我有以下基本 CMakeLists.txt 文件。
target_include_directories( addnum
PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include"
)
add_executable(addnumapp src/main.cpp)
target_link_libraries(addnumapp addnum)
SET(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "g++ (>= 7), libffi-dev, libncurses5-dev, libsqlite3-dev, mcpp, zlib1g-dev")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Some person")
INCLUDE(CPack)
为了创建一个“deb”包,我创建了一个build 目录并运行以下命令来构建我的项目:
cmake -S . -B ./build
然后我从build 目录中运行cpack 命令并生成一个“.deb”包。这非常适合生成单个“.deb”包;但是,我想使用cmake 和cpack 生成多个包,但我不确定最好的方法是什么。
例如,如何为所有受支持的 Debian 架构生成“.deb”包?
根据我的研究,我知道以下命令可以让您指定架构:
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE, "i386")
但是,这仅在您通过我上面概述的方法生成单个 Debian 软件包时才有效。如何为所有不同的架构生成多个 Debian 软件包?
我的第二个问题是关于为不同的操作系统生成多个包。比如上面的CMakeLists.txt文件只是生成了一个Debian包;不过,我也想为 MacOS 和 Windows 生成包。
根据我的研究,我知道我的CMakeLists.txt 文件的以下编辑理论上应该是我为 MacOS 生成“.dmg”包所需的最小更改,除了我还想要生成的 Debian 包.
...
SET(CPACK_GENERATOR "DEB;DragNDrop") # modification here
set(CPACK_DEBIAN_PACKAGE_DEPENDS "g++ (>= 7), libffi-dev, libncurses5-dev, libsqlite3-dev, mcpp, zlib1g-dev")
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Some person") #required
INCLUDE(CPack)
INCLUDE(CPackDMG) # addition here
但是,当我在这个修改后的 CMakeLists.txt 文件(来自 Ubuntu 操作系统)上运行 cmake -S . -B ./build 时,我收到以下错误:
CMakeLists.txt:28 (INCLUDE) 处的 CMake 错误:找不到 INCLUDE 请求的文件:
CPackDMG-- 配置不完整,出现错误!
这个错误是因为我试图从 Ubuntu 生成一个 MacOS“dmg”包还是因为我缺少一些 cpack 依赖项?
此外,这是为不同平台生成不同包的最佳方式吗?
总而言之,我的两个问题是(1)如何为不同的架构生成多个包和(2)如何为不同的平台生成多个包?(请记住,我是对 C++、CMake 和 CPack 非常陌生。)
【问题讨论】:
标签: makefile cmake package cpack