私はCMAKEで通常のマシン全体の環境変数を取得する方法を知っています
$ENV{EnvironmentVariableName}
しかし、ユーザー固有の環境変数を取得できません。それは可能ですか?
私はCMAKEで通常のマシン全体の環境変数を取得する方法を知っています
$ENV{EnvironmentVariableName}
しかし、ユーザー固有の環境変数を取得できません。それは可能ですか?
回答:
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では空です。
IF($ENV{COVERAGE}) ... END()
、呼び出し:COVERAGE=1 cmake ..
。確かに、中身はチェックしていませんし、チェックするかどうかもわかりません。しかし、それが定義されているかどうかにかかわらず、それは確かにテストのために機能します!
(システムプロパティを使用して変更する)環境変数は、新しいサブシェルを作成するときにのみサブシェルに伝達されます。
User env varsを変更したときにコマンドラインプロンプト(DOSまたはcygwin)を開いていた場合、それらは表示されません。
ユーザー設定を変更した後、新しいコマンドラインプロンプトを開く必要があります。
Unix / Linuxで同等のものは、.bash_rcに行を追加します。値を取得するには、新しいシェルを開始する必要があります。
SET var_name=var_value
、現在のDOSセッションで環境変数を設定するか、SETX var_name var_value
次を参照してください。恒久的に設定するためにセットし、SETXを。ローカル設定も面白いかもしれません。
source ~/.bashrc
して、変更した.bashrc
ファイルを再実行し、現在のセッションに新しい値を取得することもできます。