Travis因日志超4MB失败,如何降低INSTALL命令冗余度?
解决CMake INSTALL命令导致Travis日志超限的问题
这个问题我之前在处理大型依赖库安装时也踩过坑!CMake默认会把每个INSTALL(DIRECTORY)操作的每一个文件/符号链接都打印到日志里,像你这种包含Stan Math、Boost、CVodes这类大库的目录,日志量很容易突破Travis的4MB限制。给你几个实用的解决办法,按推荐程度排序:
1. 给单个INSTALL命令添加日志静默参数(CMake 3.14+)
如果你的项目用的是CMake 3.14或更高版本,最精准的做法是给每个INSTALL(DIRECTORY)加上MESSAGE_NEVER参数,让CMake彻底跳过这个安装操作的日志输出:
INSTALL( DIRECTORY ${STAN_INCLUDE_DIR_STAN_MATH} DESTINATION include/s/lib/external/Stan MESSAGE_NEVER ) INSTALL( DIRECTORY ${STAN_INCLUDE_DIR_BOOST} DESTINATION include/s/lib/external/Stan_Boost MESSAGE_NEVER ) INSTALL( DIRECTORY ${STAN_INCLUDE_DIR_CVODES} DESTINATION include/s/lib/external/Stan_Cvodes MESSAGE_NEVER )
这个方法的好处是只针对这几个大目录的安装静默,其他INSTALL命令的日志不受影响,方便你排查其他安装问题。
2. 全局调整CMake安装日志级别
如果不想逐个修改INSTALL命令,或者你的CMake版本低于3.14,可以全局设置CMAKE_INSTALL_MESSAGE变量,让CMake只输出目录级别的汇总日志,不打印单个文件:
方法A:在CMakeLists.txt中设置
在你的INSTALL命令之前添加:
# LAZY模式:只输出每个目录的安装提示,不打印单个文件/链接 set(CMAKE_INSTALL_MESSAGE LAZY)
方法B:在Travis构建脚本中通过命令行参数设置
直接在Travis的CMake配置步骤里加参数,不用改项目的CMakeLists.txt:
cmake .. -DCMAKE_INSTALL_MESSAGE=LAZY
如果想彻底关闭所有安装日志,可以把LAZY换成NONE,但不推荐——万一安装失败,你连基本的错误提示都看不到。
3. 额外小技巧:压缩Travis日志(可选)
如果上面的方法还不够,你可以在Travis的.travis.yml里开启日志压缩,虽然不能减少日志生成量,但能让Travis接受更大的日志体积:
before_install: - export TRAVIS_LOGS_COMPRESS=true
不过这个是辅助手段,优先用前面的CMake日志控制方法更直接。
内容的提问来源于stack exchange,提问作者AspiringMat
相关产品推荐
相关产品推荐

