【问题标题】:CPack Source archive empty on Travis CI but not locallyTravis CI 上的 CPack Source 存档为空,但不是本地
【发布时间】:2020-02-11 11:45:12
【问题描述】:

我正在使用 CPack 创建源存档:

cmake --build . --config Release --target package_source

这在我的本地 Ubuntu 机器上运行良好,但是在 Travis CI 上构建时生成的存档是空的。没有错误消息。我在启用--debug 时检查了 CPack 日志,除了文件没有被复制到临时安装空间之外,没有发现任何差异。源路径和目标路径正确,但找不到文件。

为什么存档在某些机器上构建时是空的,而在其他机器上则不是?

【问题讨论】:

  • 确保您在 Travis 上拥有相同的环境(例如,cmake 版本、Ubuntu 版本等)
  • 是的,环境具有相同的操作系统和工具版本。
  • 你使用什么包生成器?作为重炮你也可以试试--trace-expand(如果包生成器有内部CMake模块,比如RPM/DEB/...)。此外,您是否在本地尝试过完全相同的(与 Travis 中的)命令? (即,在 clean 源/二进制目录中)
  • 是的,尝试过跟踪和干净的目录。在本地正常工作,在 travis 上为空存档。

标签: cmake travis-ci cpack


【解决方案1】:

在同一个问题困扰了 10 多个小时后,我终于弄明白了。也许对你来说也是一样。在排除所有其他原因之后,这实际上是最合乎逻辑的事情:文件被忽略了!

我从 package_source 跳过了源代码中的“build”目录:

# exclude build directories like /build/, /build-* and /build_*
list(APPEND CPACK_SOURCE_IGNORE_FILES "/build[\\-_/]")

但是 travis 上的路径是 /home/travis/build/AlexanderLanin/ccache

选项 1

我不是正则表达式专家,但这至少应该让你走上正确的道路:

list(APPEND CPACK_SOURCE_IGNORE_FILES "^((?!/home/travis/).*|/home/travis/.+)/build[\\-_/]")

解释@https://regex101.com/r/DJfeDi/1

选项 2

假设你在 CMakeLists.txt 中,稍微简单一点:

list(APPEND CPACK_SOURCE_IGNORE_FILES "^${CMAKE_SOURCE_DIR}/build[\\-_/]")
list(APPEND CPACK_SOURCE_IGNORE_FILES "^${CMAKE_BINARY_DIR}")

【讨论】:

  • CPack 正则表达式不支持反向匹配。否则这就是问题所在!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多