如何用CMake检查网络连接?(如果没有,自动防止失败)

问题描述 投票:1回答:1

例如,当使用 外部项目FetchContent 模块可以下载额外的数据并在CMake中使用。如果没有网络连接,无论下载是否成功,这些模块都会失败,CMake也不会完成配置。有一些标志如FETCHCONTENT_FULLY_DISCONNECTED或FETCHCONTENT_UPDATES_DISCONNECTED来防止检查,从而防止失败。但是这些都要手动设置。(相关问题。cmake:外部项目更新和脱机工作。).

是否可以检查是否有连接后自动设置FETCHCONTENT_FULLY_DISCONNECTED?怎么做呢?或者有其他方法可以防止在没有网络连接的情况下CMake失败?

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

cmake download connection offline detection
1个回答
0
投票

我找到了一个检查连接的变通方法。虽然它不会一直工作,但对我们来说已经足够好了。我的方法是基于CMake的 执行_进程 的问题 https:/stackoverflow.coma275904449909548。, https:/stackoverflow.coma63576299909548。https:/superuser.comq1406089.

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

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

© www.soinside.com 2019 - 2024. All rights reserved.