防止 cmake 运行 cpack

Posted

技术标签:

【中文标题】防止 cmake 运行 cpack【英文标题】:Prevent cmake to run cpack 【发布时间】:2016-06-03 13:05:28 【问题描述】:

我有一个 CMake 项目,我想阻止 make package 在某些平台上做除了打印消息之外的任何事情。

我知道如何添加一条消息,甚至是一条致命消息,但它在 cmake 生成期间运行,而不是在构建期间运行。我必须求助于add_custom_command吗?这不会给我我想要的,因为这会创建一个新的构建目标......

如何覆盖某些平台的 package 目标以仅显示消息?

【问题讨论】:

【参考方案1】:

为什么要在你的 cmake 列表中包含 cpack?

为了让 cmake 项目有一个 cpack 控制的包目标,你的项目应该包括如下一行:

include(CPack)

并且还设置了一些与 cpack 相关的属性。如果你不想这样,你可以把那条线去掉。

【讨论】:

“在某些平台上”,但我当然可以有条件地进行包含。 那么您是否希望源代码生成一个失败的 make 文件,目标包在 Linux 上不执行任何操作?正如你所说的,如果平台是 32 位,deb 安装程序(cpack 包的结果)拒绝安装,对吧? 对。不,我希望目标“包”打印一条消息(最好)或根本不存在。所以***.com/a/38119685/204658 是我一直在寻找的。​​span> 【参考方案2】:

正如 shu 指出的,你可以这样做:

if (! WIN32)
    include(cpack)
else()
    cmake_policy(SET CMP0037 OLD)
    add_custom_target(package
        #add dependencies on other targets here
        #[[DEPENDS install]]
        COMMAND $CMAKE_COMMAND -E echo "custom target for non windows platforms!"
)
endif()

请注意,默认情况下,您将无法覆盖 testpackage 等保留目标。我们将在此处关闭该策略以编写我们自己的包目标。

【讨论】:

以上是关于防止 cmake 运行 cpack的主要内容,如果未能解决你的问题,请参考以下文章

cmake/cpack 组件 debuginfo rpm 包没有出现

使用 CMake 和 CPack 为一个组件创建包

没有出现cmake / cpack组件的debuginfo rpm包

CPack 尝试构建所有目标

CPack / CMake:每个 CPACK_GENERATOR 的不同安装前缀

使用 CPack 打包时是不是需要 CMake 安装步骤?