CMake でユーザー環境変数を取得する方法 (Windows)
-
22-08-2019 - |
質問
CMAKEで通常のマシン全体の環境変数を取得する方法を知っています。
$ENV{EnvironmentVariableName}
しかし、ユーザー固有の環境変数を取得できません。それは可能ですか?またその方法は?
解決
あなたCMakeのスクリプトに変数を取得
あなたはcmakeの呼び出しを持つ行に変数を渡すことができます:
FOO=1 cmake
またはBASHで変数をエクスポートする:
export FOO=1
そして、あなたが使用してcmakeのスクリプトでそれを拾うことができます:
$ENV{FOO}
他のヒント
呼び出すこともできます cmake クロスプラットフォームの方法でこれを行うために、それ自体が次のようになります。
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
変更した環境でコマンドを実行します。
ただ 気づいてください これは初回のみ機能する可能性があります。CMake が連続したビルドの 1 つで再構成する場合 (例: make
, 、 1つ CMakeLists.txt
が変更され、CMake が生成プロセスを再度実行した場合)、ユーザー定義の環境変数が存在しない可能性があります (システム全体の環境変数と比較して)。
そこで、プロジェクト内のユーザー定義の環境変数を CMake のキャッシュ変数に転送します。
cmake_minimum_required(VERSION 2.6)
project(PrintEnv NONE)
if (NOT "$ENV{EnvironmentVariableName}" STREQUAL "")
set(EnvironmentVariableName "$ENV{EnvironmentVariableName}" CACHE INTERNAL "Copied from environment variable")
endif()
message("EnvironmentVariableName = ${EnvironmentVariableName}")
参照
あなたは、変数をエクスポートする必要があります。だから、Linuxでの例:
export EnvironmentVariableName=foo
アンエクスポート変数がCMAKEで空になってます。
環境変数([システムのプロパティを使用して変更することを)あなたが新しいサブシェルを作成するときにのみ、サブシェルに伝播されます。
はユーザーのenv VARSを変更するときに、コマンドラインプロンプト(DOSまたはcygwinの)開いていた場合、それらは表示されません。
あなたは、ユーザーの設定を変更した後に、新しいコマンド・ライン・プロンプトを開く必要があります。
UNIX / Linuxで同等のは、あなたの.bash_rcに行を追加します。あなたが値を取得するための新しいシェルを起動する必要があります。