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

Qt6+C++项目构建成功后出现奇怪的CMakeLists.o错误

问题描述

使用Qt6构建C++应用时,构建完成后出现如下错误:

/home/me/projects/Testapp/build> make -j24 CMakeLists.o
make: *** No rule to make target 'CMakeLists.o'.  Stop.
*** Failure: Exit code 2 ***

错误出现前的正常CMake配置输出会被错误信息覆盖,正常输出如下:

/home/me/projects/Testapp/build> /usr/bin/cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release /home/me/projects/Testapp
-- Configuring done (0.1s)
-- Generating done (0.0s)
-- Build files have been written to: /home/me/projects/Testapp/build
*** Finished ***

现象细节:

  • 修改CMakeLists.txt(比如添加空格)并重新构建1-2次后,错误会短暂显示后消失,疑似存在竞态条件
  • 应用本身可以正常运行,但不清楚错误原因及CMakeLists.o的含义

环境信息:

  • CMake版本:3.28.3
  • C++版本:13.2.0
  • 操作系统:Kubuntu 24.04
  • IDE:KDevelop 5.12.230805
问题分析与解决

关于CMakeLists.o的含义

CMakeLists.txt是CMake的项目配置文件,本身不需要被编译成目标文件(.o是C/C++源码编译后生成的中间目标文件),这个错误并非项目或CMake配置问题,而是IDE调用构建命令时的参数错误导致的。

错误原因

  1. KDevelop构建模块的竞态条件:当CMake刚完成配置生成Makefile后,IDE的构建模块可能未同步最新的Makefile内容,就错误地将CMakeLists.txt当作需要编译的源文件,向make传递了CMakeLists.o这个不存在的目标,导致报错。
  2. 修改CMakeLists.txt后重新构建,IDE有足够时间完成Makefile的同步,因此错误会消失,符合竞态条件的特征。

解决办法

  • 手动同步构建流程:执行cmake重新配置后,等待1-2秒再触发构建,避免IDE异步操作的冲突。
  • 修正KDevelop构建命令:进入项目设置 -> 构建选项,确保构建命令为make -j24(不要额外添加CMakeLists.o目标参数)。
  • 清理构建缓存:删除build目录下的所有文件,重新执行cmake ..生成Makefile,再运行make -j24,排除旧缓存的干扰。
  • 更新KDevelop:该问题可能是IDE的已知bug,升级到最新版本大概率能修复此类竞态条件问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:47:09