Cmake:打包后步骤

Cmake:打包后步骤,cmake,Cmake,我正在寻找一种在打包完成后执行代码的方法 我试图添加一个自定义目标,该目标取决于生成的包目标。 这看起来不起作用,下面是cmake错误: CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle): "ALL_BUILD" of type UTILITY depends on "UPLOAD" (strong) "PACKAGE"

我正在寻找一种在打包完成后执行代码的方法

我试图添加一个自定义目标,该目标取决于生成的包目标。 这看起来不起作用,下面是cmake错误:

CMake Error: The inter-target dependency graph contains the following strongly connected        component (cycle):
"ALL_BUILD" of type UTILITY
depends on "UPLOAD" (strong)
"PACKAGE" of type GLOBAL_TARGET
depends on "ALL_BUILD" (strong)
"UPLOAD" of type UTILITY
depends on "PACKAGE" (strong)
At least one of these targets is not a STATIC_LIBRARY.  Cyclic dependencies are allowed only among static libraries.
为此,我使用以下代码:

add_custom_target(UPLOAD ALL 
    COMMAND cmake -E echo "Should be post packging!"
)
add_dependencies(UPLOAD PACKAGE)

有没有办法让目标上传打包的文件

创建自己的包目标

add_custom_target(mypackage
  COMMAND ${CMAKE_CPACK_COMMAND}
  COMMAND ${CMAKE_COMMAND} -E echo "after packaging"
)

Upd:由于CMake 3.19,在CPack生成包之后,必须执行任何任务。

在这种情况下,我必须在不使用CMake的情况下配置CPack?或者有没有一种方法可以使用cmake配置Cpack,而不包括整个cpackConfig(使用cmake include(Cpack)生成的Cpack)。否则,从包含cpack的cmake中,我可以在sub命令中使用动态生成的cpack\u PACKAGE\u FILE\u NAME变量。仍然可以这样做吗?我不明白这个问题。您是否尝试了我发布的内容?是的,我尝试了。它输出未指定生成器。这意味着“CPackConfig.cmake”我猜没有找到文件。这是打包的配置文件。(我从cmake中删除了include(cpack),并进行了清理和重建)。事实上,我是从cmake中配置CPackConfig文件。一些变量不是常量,比如要复制到包中的文件(dll、so、配置等)。当a重新使用旧的CPackConfig文件时,它确实可以工作,但是只有在发行版中,而不是在调试中,而且我也只会在获取该文件时设置文件。好的,在仔细查看之后,发现cmake调用了cmake_install.cmake文件。其他配置大多数是通过平均值或其他值进行预设的。因此,我们可以使用include(CPACK)来配置东西,即使在VS上(至少)它添加了一个现在“无用”的包项目。也可以为所有生成器配置一个CPackConfig.cmake.in。但不确定如何配置。此外,我们不应该调用${cmake_CPACK_COMMAND}如果我们想制作调试包,就需要单独为visual Studio制作。我们需要将配置传递给它。