Cmake Travis CI上的CPack源存档为空,但不在本地

Cmake Travis CI上的CPack源存档为空,但不在本地,cmake,travis-ci,cpack,Cmake,Travis Ci,Cpack,我正在使用CPack创建源存档: cmake --build . --config Release --target package_source 这在我本地的Ubuntu机器上运行良好,但在Travis CI上构建时,生成的归档文件是空的。没有错误消息。我已在启用--debug时检查了CPack日志,除文件未复制到临时安装空间外,未发现任何差异。源路径和目标路径正确,但找不到文件 为什么在某些机器上构建而在其他机器上构建时,归档文件是空的 在同一个问题纠缠了10多个小时后,我终于找到了答案。

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

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


为什么在某些机器上构建而在其他机器上构建时,归档文件是空的

在同一个问题纠缠了10多个小时后,我终于找到了答案。也许你也一样。在排除所有其他原因之后,这是最符合逻辑的事情:文件被忽略了

我正在从包\u源跳过源代码中的“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[\\-_/]")
解释@

选择2 假设您在CMakeLists.txt中,则稍微简单一些:

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

确保您在Travis上有相同的环境(例如,cmake版本、Ubuntu版本等)。是的,这些环境有相同的操作系统和工具版本。您使用什么软件包生成器?作为重炮,您还可以尝试
--跟踪扩展
(如果包生成器具有内部CMake模块,如RPM/DEB/…)。另外,您是否在本地尝试过完全相同的命令(与Travis中的命令相同)?(即,在干净的源代码/二进制目录中)是的,尝试了跟踪和干净的目录。本地工作正常,travis.CPack regex上的空存档不支持反向匹配。否则这就是问题所在!