构建包装工具可能允许你添加 CMake 参数,却隐藏了启动 CMake 时所用的环境。早期项目钩子为你提供一个位置来提供配置过程的代理值。

将一个小文件保存在稳定的绝对路径下,例如 /home/alex/cmake/proxy-env.cmake:

set(ENV{http_proxy} "http://proxy.example:8080")
set(ENV{https_proxy} "http://proxy.example:8080")

把该文件传给配置过程:

cmake -S . -B build -DCMAKE_PROJECT_INCLUDE_BEFORE=/home/alex/cmake/proxy-env.cmake

CMAKE_PROJECT_INCLUDE_BEFORE 会在每次 project() 调用开始时包含该文件。因此它比 CMAKE_PROJECT_INCLUDE 更早执行,后者在该调用结束时执行。当语言设置或嵌套项目需要这条路径时,这个区别很重要。

对于配置期间经公共中介获准的公开下载,请从 HTTP 代理列表中选择 HTTP URL 值。该钩子仍然无法影响它之前已完成的工作,包括第一次 project() 调用之前的下载。它也不会写入持久的操作系统环境设置。

此后由这个 CMake 进程启动的进程可以继承这些值,前提是它们的网络客户端支持。之后单独启动的构建有自己的环境。推迟到该构建阶段的下载也必须在彼处获得代理。

当钩子文件包含私有连接信息时,请把它放在公开源码树之外。-D 参数把钩子路径存为 CMake 变量;set(ENV{...}) 修改的是正在运行进程的环境,而不是把缓存变量变成代理设置。

相关文章