Qt CMake 的网络问题解决方案

CMakeFetchContent 使得在项目中使用第三方的库变得非常方便,由于是 CMake 原生支持的功能,因此不用像 vcpkg 那样进行各种设置。 例如如果想在项目中集成并使用 spdlog 可以在 CMakeLists.txt 中进行如下的声明:

include(FetchContent)

FetchContent_Declare(spdlog
    GIT_REPOSITORY https://github.com/gabime/spdlog.git
    GIT_TAG v1.x
)

FetchContent_MakeAvailable(spdlog)

target_link_libraries(YourProject
    PRIVATE
        spdlog::spdlog
)

但是在基于 CMakeQt 项目中,如果打开项目的时候使用 FetchContent 时存在网络方面的问题会导致项目配置的时间很长最后失败的情况,最终项目无法进行调试和生成。
image.jpg

image.png
从错误信息中看到,CMake 调用了 git pull 去获取 GIT_REPOSITORY 中的仓库。但是由于网络原因 git pull 失败了,因此项目的配置过程也就失败了。由于 git 是支持通过环境变量设置代理的,由于 Windows 和 Unix 中的子进程会继承父进程的环境变量,可以通过给 CMake 指定 http_proxy, https_proxy 等环境变量的方式让 git 使用代理进行仓库的操作。总结一下,那么问题就集中在如何在 Qt Creator 中给 CMake 设置环境变量呢?
在 Qt Creator 中的 Projects 页面,可以看到如下的设置界面:
image 2.png
在这个界面,我们可以对环境变量进行编辑,包括添加。
image 3.png
image 4.png
关闭 Qt Creator 并重新打开之后,再次打开项目,可以发现很快就能进行编译和调试了。

# QtCMakeGit


评论已关闭