You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为CMake流程中执行的各命令添加时间戳以调试依赖问题?

问题

我正调试一个疑似因构建依赖设置不当引发的问题,需确认该猜想。为此,我希望记录CMake流程中每个执行命令的带秒数的时间戳。

我的配置命令为:

cmake -G Ninja -DCUTLASS_NVCC_ARCHS=80 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCUTLASS_INSTALL_TESTS=ON ^"-DCMAKE_NINJA_WHAT=ninja\ -d\ explain\ -d\ stats^" -DCMAKE_INSTALL_PREFIX=d:/test/worker/build-tools-main/cutlass/install -DCMAKE_TEST_INSTALL_PREFIX=d:/test/worker/build-tools-main/cutlass/install -Wno-dev d:/test/worker/test-main/cutlass

构建命令为:

cmake --build . --target install --verbose

请问是否有简便方法可为每个执行的构建命令添加时间戳?CMake是否有相关内置标志?

解决方案

一、CMake无直接内置时间戳标志

CMake本身没有专门为构建命令添加时间戳的内置开关,但可以通过以下几种简便方式实现需求:

二、利用Ninja原生日志功能(推荐)

由于你使用Ninja生成器,Ninja自带的日志追踪功能可以直接输出带时间戳的命令执行记录:

  • 直接给构建命令传递Ninja参数,控制台输出会包含时间戳:
    cmake --build . --target install --verbose -- -d trace
    
  • 若需要生成详细日志文件,可使用:
    cmake --build . --target install --verbose -- -t trace
    
    执行后会生成build.ninja.trace文件,里面记录了每个命令的开始/结束时间(精确到毫秒),同时控制台也会输出关键时间节点信息。

三、通过命令行工具包装输出

如果需要在控制台实时看到每行输出的时间戳,可借助通用命令行工具:

  • Linux/macOS:使用ts命令(需先安装moreutils包),通过管道给输出加时间戳:
    cmake --build . --target install --verbose | ts '[%Y-%m-%d %H:%M:%.S]'
    
  • Windows PowerShell:自定义函数处理输出:
    function Add-Timestamp {
        process { "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff')] $_" }
    }
    cmake --build . --target install --verbose | Add-Timestamp
    

四、修改CMake配置添加时间戳前缀

若需针对编译命令强制添加时间戳,可在项目的CMakeLists.txt中修改编译规则:

set(CMAKE_CXX_COMPILE_OBJECT "echo [$(date +%Y-%m-%d\ %H:%M:%S.%N)] && <CMAKE_CXX_COMPILER> <FLAGS> <DEFINES> <INCLUDES> -o <OBJECT> -c <SOURCE>")
set(CMAKE_C_COMPILE_OBJECT "echo [$(date +%Y-%m-%d\ %H:%M:%S.%N)] && <CMAKE_C_COMPILER> <FLAGS> <DEFINES> <INCLUDES> -o <OBJECT> -c <SOURCE>")

注意:这种方式仅覆盖C/C++编译命令,无法涵盖所有构建阶段的命令。

内容的提问来源于stack exchange,提问作者vam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:42:36