gpt4 book ai didi

cmake - CPack/CMake : Different installation prefixes per CPACK_GENERATOR

转载 作者:行者123 更新时间:2023-12-03 23:50:42 25 4
gpt4 key购买 nike

如何为不同的 CPACK_GENERATOR 指定不同的安装前缀?

例如:

  • DEB包应该安装到/opt/project
  • TGZ 存档应该只包含 project 目录

来自 documentation我知道我必须使用 CPACK_PROJECT_CONFIG_FILE 变量。使用它,应该可以实现预期的目标。但是,它对我不起作用。

这是我的 CPack 配置:

set(CPACK_GENERATOR "DEB;TGZ")
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/cmake/package.linux.txt)

这是我的 ${CMAKE_SOURCE_DIR}/cmake/package.linux.txt 文件:

IF (CPACK_GENERATOR MATCHES "DEB")
set(CPACK_NATIVE_INSTALL_DIRECTORY "/opt")
set(CMAKE_INSTALL_PREFIX "/opt")
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt")
set(CPACK_INSTALL_DIRECTORY "/opt")
ELSEIF(CPACK_GENERATOR MATCHES "TGZ")
set(CPACK_NATIVE_INSTALL_DIRECTORY "")
set(CMAKE_INSTALL_PREFIX "")
set(CPACK_PACKAGING_INSTALL_PREFIX "")
set(CPACK_INSTALL_DIRECTORY "")
ENDIF()

我已确保使用 MESSAGE() 指令解析所有文件,但我的包的前缀始终是 /usr/local

最佳答案

最后,我发现了问题所在。我有 CPACK_SET_DESTDIR flag放。这使得 CPACK 将 usr/local 附加到包含编译的二进制文件的目录。删除相应的 SET() 指令后,一切都像一个魅力。

为了记录,我将为您提供我的最小工作示例。

CMakeLists.txt:

cmake_minimum_required(VERSION 3.2)
project(stripped-down C)

add_executable(main main.c)

install(TARGETS main
RUNTIME DESTINATION bin
)

set(CPACK_GENERATOR "DEB;TGZ")
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/package.txt)

set(CPACK_PACKAGE_CONTACT "Some One <some.one@somewhere.com>")

include(CPack)

${CMAKE_SOURCE_DIR}/package.txt:

IF (CPACK_GENERATOR MATCHES "DEB")
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt")
ELSEIF(CPACK_GENERATOR MATCHES "TGZ")
set(CPACK_PACKAGING_INSTALL_PREFIX "")
ENDIF()

关于cmake - CPack/CMake : Different installation prefixes per CPACK_GENERATOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30937317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com