Windows下Qt Creator编译Linux项目报错:无目标规则/文件未找到
问题描述
此前仅用Qt Creator开发简单项目,现在在Windows系统上编译一个原本可在Linux运行的项目,遇到编译错误:
[...] C:/Qt/Tools/mingw1310_64/bin/mingw32-make -f Makefile.Debug mingw32-make[4]: Entering directory 'C:/Users/dargaud/Desktop/PACIFICS/12-phases-sw/build/Desktop_Qt_6_8_1_MinGW_64_bit-Debug/ipbus-sw/ipbus_lib/lib' mingw32-make[4]: *** No rule to make target '/c/Users/dargaud/Desktop/PACIFICS/12-phases-sw/ipbus-sw/ipbus_lib/src/TIPbusClient.cpp', needed by 'debug/TIPbusClient.o'. Stop. mingw32-make[4]: Leaving directory 'C:/Users/dargaud/Desktop/PACIFICS/12-phases-sw/build/Desktop_Qt_6_8_1_MinGW_64_bit-Debug/ipbus-sw/ipbus_lib/lib' mingw32-make[3]: *** [Makefile:45: debug] Error 2
该错误在多个子项目中重复出现,最终还提示多个文件未找到:
WARNING: Failure to find: /c/Users/dargaud/Desktop/PACIFICS/12-phases-sw/ipbus-sw/ipbus_lib/src/TIPbusClient.h WARNING: Failure to find: /c/Users/dargaud/Desktop/PACIFICS/12-phases-sw/ipbus-sw/ipbus_lib/src/packets.h WARNING: Failure to find: /c/Users/dargaud/Desktop/PACIFICS/12-phases-sw/ipbus-sw/ipbus_lib/src/TIPbusPacket.h WARNING: Failure to find: /c/Users/dargaud/Desktop/PACIFICS/12-phases-sw/ipbus-sw/ipbus_lib/src/TreqThread.h WARNING: Failure to find: /c/Users/dargaud/Desktop/PACIFICS/12-phases-sw/ipbus-sw/amc_base/TAMC_base.h WARNING: Failure to find: TIPbusClient.h
项目的.pro文件内容:
win32 { DEFINES = _WINDOWS _CRT_SECURE_NO_WARNINGS } unix { } macx { } include(../src/ipbus_src_path.pri) PROJECT = ipbus TEMPLATE = lib QT += network CONFIG += qt debug warn_on INCLUDEPATH += . INCLUDEPATH += ../src DESTDIR = . TARGET = ipbus VERSION = 0.1.0 MOC_DIR = moc RCC_DIR = resources !debug_and_release { OBJECTS_DIR = obj } HEADERS += SOURCES +=
疑问:是不是.pro文件缺少包含项,或是缺失Windows特定配置选项?
解决思路
1. 核心问题:.pro文件未添加源文件和头文件
你的.pro文件里HEADERS +=和SOURCES +=后面是空的,Qt的qmake无法生成这些文件的编译规则,自然找不到对应的目标文件。Linux上能编译,大概率是因为Linux下的构建脚本(比如Makefile、其他pri文件)自动包含了这些文件,但Windows下没有生效。
2. 检查pri文件是否生效
你引入了../src/ipbus_src_path.pri,先确认这个文件里有没有正确添加HEADERS和SOURCES的内容。如果这个pri文件是负责管理源文件路径的,可能在Windows下路径格式不兼容(比如用了Linux的斜杠或者相对路径错误),导致qmake没读到这些文件。
3. 手动补充源文件(临时验证)
可以先在.pro里手动添加缺失的文件,验证是否能编译:
HEADERS += ../src/TIPbusClient.h \ ../src/packets.h \ ../src/TIPbusPacket.h \ ../src/TreqThread.h \ ../amc_base/TAMC_base.h SOURCES += ../src/TIPbusClient.cpp
注意路径要和实际文件位置匹配,Windows下Qt的qmake兼容正斜杠和反斜杠,不用特意转义。
4. Windows特定配置补充
目前你的win32块只加了两个宏定义,一般还需要注意:
- 如果项目用到了POSIX API,需要添加
DEFINES += _POSIX_C_SOURCE=200809L或者对应的兼容宏 - 若有动态链接库导出需求,要添加
DEFINES += IPBUS_LIBRARY(假设你的库导出宏是这个,需要和代码里的导出声明对应) - 检查
INCLUDEPATH是否覆盖了所有头文件目录,比如../amc_base目前不在INCLUDEPATH里,需要加上:
INCLUDEPATH += ../amc_base
5. 清理重建项目
修改.pro后,一定要在Qt Creator里执行清理项目 -> qmake -> 构建项目,避免旧的Makefile缓存导致问题。
内容的提问来源于stack exchange,提问作者dargaud
相关产品推荐
相关产品推荐

