Python脚本调用CMake/CTest报错:缺失DartConfiguration.tcl及夜间启动时间配置
Fixing "No nightly start time found" Error in Python-driven CTest Execution
我之前也碰到过类似的坑——Bash脚本跑CTest顺风顺水,换成Python调用就突然蹦出这个警告。其实大多是因为Python调用时的环境、参数传递细节和Bash不一样,咱们一步步排查解决:
先确认Python脚本的工作目录和CTest调用方式
Bash里可能默认就在build目录下执行,或者环境变量帮你搞定了路径,但Python用subprocess调用时,一定要确保切换到CMake生成的build目录再执行CTest。比如:import subprocess import os # 先切换到build目录(根据你的实际路径调整) os.chdir("./cmake-build-release") # 再调用CTest,比如Nightly模式 subprocess.run(["ctest", "-D", "Nightly"], check=True)如果不想切换目录,也可以在
subprocess.run里指定cwd参数直接指定工作目录,避免CTest找不到配置文件。检查CTestConfig.cmake的必填变量
打开你的项目根目录下的CTestConfig.cmake,确认里面一定要有CTEST_NIGHTLY_START_TIME这个变量,比如:# 必须设置这个变量,时区建议用UTC避免地域问题 set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC") # 其他可选但建议配置的变量 set(CTEST_PROJECT_NAME "YourProjectName") set(CTEST_DROP_METHOD "http")Bash脚本可能因为之前的缓存或者隐性环境变量没触发检查,但Python调用时环境更"干净",就会暴露这个缺失。
手动触发DartConfiguration.tcl生成
既然CMake没自动生成这个文件,咱们可以在CMakeLists.txt里加一行强制生成:include(CTest) # 把根目录的CTestConfig.cmake复制到build目录生成Dart配置文件 configure_file(${CMAKE_SOURCE_DIR}/CTestConfig.cmake ${CMAKE_BINARY_DIR}/DartConfiguration.tcl COPYONLY)或者在Python调用CTest时直接指定配置文件路径:
subprocess.run(["ctest", "-D", "Nightly", "--dart-config", "../CTestConfig.cmake"], cwd="./build", check=True)确认CTest的运行模式是否匹配
如果你的Python脚本只是想跑普通测试,却不小心加了-D Nightly参数,就会触发仪表盘模式的检查。这种情况下,去掉-D Nightly,直接用ctest或者ctest -R <测试名称>即可。
内容的提问来源于stack exchange,提问作者AnatoEm
相关产品推荐
相关产品推荐

