You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CMake Qt项目Git重置/vcpkg变更后突发路径重复错误:无法找到源文件

CMake Qt项目Git重置/vcpkg变更后突发路径重复错误:无法找到源文件

这种路径莫名重复拼接的问题真的很闹心,尤其是明明代码没动、甚至清了缓存换了分支还是出问题的时候。结合你提供的信息,我来拆解几个最可能的原因和对应的解决办法:

一、先修复源文件路径的不规范写法(最可能直接解决)

看你src/app/CMakeLists.txt里的qt_add_executable用了./main.cpp,虽然理论上当前目录是src/app./没问题,但CMake的相对路径解析有时候会被上层变量、vcpkg脚本干扰——尤其是报错的vcpkg.cmake第600行,正是vcpkg重写_add_executable的逻辑,很可能对相对路径的处理出了bug。

修改方案
./main.cpp改成以下两种写法之一,彻底避免相对路径的解析歧义:

  1. 直接写文件名(当前CMakeLists.txt就在src/app目录下,最简洁):
if(WIN32)
    qt_add_executable(InvokeInvoiceSystem WIN32 main.cpp
        # ...其他源文件
    )
endif()
  1. CMAKE_CURRENT_SOURCE_DIR指定绝对路径(最稳妥,完全避免路径解析问题):
if(WIN32)
    qt_add_executable(InvokeInvoiceSystem WIN32 ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
        # ...其他源文件
    )
endif()

二、排查vcpkg脚本的路径处理干扰

报错直接来自vcpkg的脚本,说明vcpkg的buildsystem逻辑在处理路径时出了问题,结合你之前切换过vcpkg使用方式的背景,试试这些操作:

  1. 检查CMake生成的toolchain参数
    如果现在不需要用vcpkg,确保生成CMake时没有指定-DCMAKE_TOOLCHAIN_FILE=C:/Users/Fabian/dev/vcpkg/scripts/buildsystems/vcpkg.cmake;如果还要用vcpkg manifest模式,先升级vcpkg到最新版本(老版本确实有过路径拼接的bug):

    cd C:/Users/Fabian/dev/vcpkg
    git pull
    .\bootstrap-vcpkg.bat
    
  2. 清理vcpkg相关缓存
    删除vcpkg的installed/x64-windows目录下的项目相关包缓存,或者用vcpkg remove --outdated清理旧包,再重新生成CMake。

三、用CMake trace工具定位路径拼接的根源

如果上面的方法没解决,我们可以用CMake的--trace-expand参数追踪路径的拼接过程,精准找到问题点:

  1. 打开终端进入项目根目录,彻底清理旧build目录:
    cd C:/Users/Fabian/dev/repos/InvokeInvoiceSystem
    rmdir /s /q out/build
    mkdir out/build
    cd out/build
    
  2. 生成CMake并过滤main.cpp相关的处理步骤:
    cmake .. --trace-expand 2>&1 | findstr "main.cpp"
    
    你会看到CMake处理main.cpp路径的每一步,比如是否有某个变量被错误设置成了重复的路径,或者vcpkg脚本在修改路径时出错,从输出里就能找到路径重复的源头。

四、排查Qt与vcpkg的CMAKE_PREFIX_PATH冲突

你在根CMakeLists.txt里同时把vcpkg和Qt的路径加到了CMAKE_PREFIX_PATH,有可能两者的CMake模块在路径处理上发生了冲突:

  1. 临时去掉vcpkg的CMAKE_PREFIX_PATH配置,只保留Qt的路径:
    set(CMAKE_PREFIX_PATH "C:/Qt/6.9.1/msvc2022_64/lib/cmake" CACHE STRING "Paths to Qt6 install prefix" )
    
    清缓存重新生成,如果问题消失,说明是路径冲突导致的。这时候可以改用vcpkg管理Qt(如果需要),或者调整vcpkg的集成方式(比如用toolchain而不是手动加CMAKE_PREFIX_PATH)。

最后再确认一个细节

你提到之前修改过文件夹结构(从apps/src改成src/app),虽然你说手动检查过,但再确认一遍根CMakeLists.txt里的add_subdirectory(src/app)是否正确——有没有手滑写成add_subdirectory(apps/src)之类的错误。

按照这个步骤来,应该能定位到问题所在。如果还有问题,可以把--trace-expand输出的相关内容贴出来,我们再进一步分析!

火山引擎 最新活动