cmake - 如何使用 CMake 检查互联网连接?(如果没有自动防止失败)
问题描述
例如,当使用ExternalProject或FetchContent模块时,可以在 CMake 中下载和使用其他数据。如果没有互联网连接,这些模块会失败,并且无论下载是否成功,CMake 都不会完成配置。有诸如 FETCHCONTENT_FULLY_DISCONNECTED 或 FETCHCONTENT_UPDATES_DISCONNECTED 之类的标志来防止检查并因此防止失败。但是这些必须手动设置。(相关问题:cmake:外部项目更新和离线工作)。
是否可以检查是否有连接到之后自动设置 FETCHCONTENT_FULLY_DISCONNECTED?怎么做?或者如果没有互联网连接,是否有其他方法可以防止 CMake 失败?
在我们的例子中,我们使用 FetchContent 下载库,然后使用 find_package 来使它们可用。我们的工作流程目前不包括手动调整 CMake 选项/变量,我们不想添加它。CMake 通过我们使用的 IDE 获取所有需要的选项,例如 CMAKE_BUILD_TYPE 或自定义标志。我们需要将目标加倍,以便为每个现有组合提供非连接版本。因此这种半手动的方法也是不可行的。
解决方案
我找到了一种解决方法来检查连接。虽然它不会一直有效,但对我们来说已经足够了。我基于 CMake 的execute_process和问题https://stackoverflow.com/a/27590444/9909548、https://stackoverflow.com/a/6357629/9909548和https://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()
希望将其添加为答案是正确的,尽管我不会接受它,而不是将其作为研究结果添加到问题中。
推荐阅读
- python - 在另一个孩子死亡后杀死一个孩子
- mongodb - 迭代pymongo游标时出现bson错误
- gitlab - “Get http://XXXX: no basic auth credentials” 使用 gitlab ci/cd 运行器在构建映像阶段出错
- c++ - C ++将二维数组索引与条件语句中的函数值进行比较
- php - 为什么 $request 除了 $request->something is available 一无所获?
- python - TypeError: 'NoneType' 对象不可迭代...... Python 错误
- amazon-web-services - 无法通过服务目录在 EMR 创建中为自定义应用程序配置传递 JSON
- typescript - 如何键入任意对象或其任何键作为方法参数
- python - 将过滤器应用于“.png”图像时遇到问题,尽管过滤器适用于“.tif”图像
- arrays - 更新/更改自定义对象的数组值 - swift