例如,当使用 外部项目 或 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的 执行_进程 的问题 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()
希望其正确的是将此作为答案添加,虽然我不会接受它,而不是将其作为研究成果添加到问题中。