You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CMake CPack仅生成tar.gz包,禁用make install安装功能?

实现仅生成tar.gz包并禁用make install命令

要达成你的需求,核心是保留CPack打包所需的安装配置,但覆盖默认的install目标使其执行时报错,具体修改如下:

修改根目录CMakeLists.txt

保留原有的install指令(CPack依赖这些指令收集打包文件),同时添加自定义的install目标覆盖默认行为:

cmake_minimum_required(VERSION 3.10.0)
project(cpack_demo VERSION 0.1.0 LANGUAGES C CXX)

add_subdirectory(math_lib)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} math_lib)

# 保留这些install指令,供CPack收集打包内容
install(TARGETS math_lib ARCHIVE DESTINATION lib COMPONENT libraries)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin COMPONENT applications)
install(FILES math_lib/lib.h DESTINATION include COMPONENT headers)

# 覆盖默认install目标,执行时抛出错误
add_custom_target(install
    COMMAND ${CMAKE_COMMAND} -E echo "Error: No rule for installation"
    COMMAND ${CMAKE_COMMAND} -E exit 1
)

# Set CPack configuration
set(CPACK_GENERATOR "TGZ") 
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
set(CPACK_SET_DESTDIR "on")
set(CPACK_PACKAGE_DESCRIPTION "Cpack demo")
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROJECT_NAME})
set(CPACK_COMPONENTS_ALL applications libraries headers)

include(CPack)

验证效果

  1. 执行原有构建命令,依然能正常生成tar.gz包:
mkdir build
cd build
cmake ..
make
make package

此时build目录下会生成cpack_demo-0.1.0.tar.gz包,包含指定的二进制、库和头文件。

  1. 执行make install时,会输出错误并终止:
make install

输出内容:

Error: No rule for installation
make: *** [install] Error 1

原理说明

  • 保留install()指令是因为CPack会通过这些指令识别需要打包的文件和目录结构,确保打包内容完整。
  • 通过add_custom_target创建同名的install目标,CMake会优先使用自定义目标覆盖默认的install目标,从而实现执行make install时报错的效果。

内容的提问来源于stack exchange,提问作者Harry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:58:13