首页 > 解决方案 > 如何使用 CMake 检查互联网连接?(如果没有自动防止失败)

问题描述

例如,当使用ExternalProjectFetchContent模块时,可以在 CMake 中下载和使用其他数据。如果没有互联网连接,这些模块会失败,并且无论下载是否成功,CMake 都不会完成配置。有诸如 FETCHCONTENT_FULLY_DISCONNECTED 或 FETCHCONTENT_UPDATES_DISCONNECTED 之类的标志来防止检查并因此防止失败。但是这些必须手动设置。(相关问题:cmake:外部项目更新和离线工作)。

是否可以检查是否有连接到之后自动设置 FETCHCONTENT_FULLY_DISCONNECTED?怎么做?或者如果没有互联网连接,是否有其他方法可以防止 CMake 失败?

在我们的例子中,我们使用 FetchContent 下载库,然后使用 find_package 来使它们可用。我们的工作流程目前不包括手动调整 CMake 选项/变量,我们不想添加它。CMake 通过我们使用的 IDE 获取所有需要的选项,例如 CMAKE_BUILD_TYPE 或自定义标志。我们需要将目标加倍,以便为每个现有组合提供非连接版本。因此这种半手动的方法也是不可行的。

标签: cmakedownloadconnectionofflinedetection

解决方案


我找到了一种解决方法来检查连接。虽然它不会一直有效,但对我们来说已经足够了。我基于 CMake 的execute_process和问题https://stackoverflow.com/a/27590444/9909548https://stackoverflow.com/a/6357629/9909548https://superuser.com/q/1406089

execute_process(
    COMMAND ping www.google.com -n 2 -w 1000
    RESULT_VARIABLE NO_CONNECTION
)
if(NO_CONNECTION GREATER 0)
    set(FETCHCONTENT_FULLY_DISCONNECTED ON)
else()
    set(FETCHCONTENT_FULLY_DISCONNECTED OFF)
endif()

希望将其添加为答案是正确的,尽管我不会接受它,而不是将其作为研究结果添加到问题中。


推荐阅读