为何FetchContent未使用指定GIT_TAG?如何解决该问题
FetchContent拉取Catch2版本不符的原因及解决办法
可能的原因
缓存复用导致旧版本未更新
CMake的FetchContent会把下载的依赖缓存到_deps目录里。如果之前已经拉取过旧版本的Catch2(对应哈希7cf2f88e50f0d1de324489c31db0314188423b6d),后续构建时默认会直接复用这个缓存,不会重新拉取你新指定的哈希值版本。其他配置覆盖了当前的Catch2声明
如果项目里还有其他地方(比如子模块、第三方依赖的CMake脚本)也通过FetchContent或find_package引入了Catch2,且那个声明的优先级更高,就会覆盖你当前指定的版本,导致拉取旧版本。
解决办法
手动清理缓存
删除项目根目录下的_deps/catch2-src、_deps/catch2-build、_deps/catch2-subbuild这几个文件夹,然后重新运行CMake,就能按照你指定的哈希拉取正确版本。强制重新拉取
在FetchContent_MakeAvailable前添加FetchContent_ForceFetch(Catch2),强制CMake忽略现有缓存,重新拉取指定版本:FetchContent_Declare( Catch2 GIT_REPOSITORY https://github.com/catchorg/Catch2.git GIT_TAG 3f0283de7a9c43200033da996ff9093be3ac84dc GIT_PROGRESS TRUE GIT_SHALLOW FALSE ) FetchContent_ForceFetch(Catch2) FetchContent_MakeAvailable(Catch2)排查重复声明
搜索项目中所有涉及Catch2的配置,确认没有其他地方的声明覆盖了你指定的版本。
内容的提问来源于stack exchange,提问作者alfC
相关产品推荐
相关产品推荐

