ビルドラッパーは CMake 引数の追加を許しながら、CMake の起動に使う環境を隠していることがあります。早期のプロジェクトフックは、構成プロセスのプロキシ値を渡す場所を 1 か所にまとめてくれます。

小さなファイルを安定した絶対パスに保存します。たとえば /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() 呼び出しより前のダウンロードも同様です。また OS の環境設定を永続的に書き込むこともありません。

この CMake プロセスが後から起動するプロセスは、ネットワーククライアントが対応していれば値を継承できます。後で別に起動するビルドは独自の環境を持ちます。そのビルド段階に先送りされたダウンロードも、そこでもプロキシを受け取る必要があります。

フックファイルに非公開の接続情報が含まれる場合は、公開ソースツリーの外に置いてください。-D 引数はフックのパスを CMake 変数として保存します。set(ENV{...}) はキャッシュ変数をプロキシ設定に変えるのではなく、実行中プロセスの環境を変更します。

関連記事