web-dev-qa-db-ja.com

CMakeでユーザー環境変数を取得する方法(Windows)

私はCMAKEで通常のマシン全体の環境変数を取得する方法を知っています

$ENV{EnvironmentVariableName}

しかし、ユーザー固有の環境変数を取得することはできません。それは可能ですか?

94
Lars Bilke

CMakeスクリプトへの変数の取得

Cmake呼び出しを使用して、行に変数を渡すことができます。

FOO=1 cmake

または、BASHで変数をエクスポートすることにより:

export FOO=1

次に、次を使用してcmakeスクリプトでそれを取得できます。

$ENV{FOO}
76

cmake 自体を呼び出して、クロスプラットフォームでこれを行うこともできます。

cmake -E env EnvironmentVariableName="Hello World" cmake ..

env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...

変更された環境でコマンドを実行します。


ただ気をつけてくださいこれは初めてしか動作しないかもしれません。 CMakeが連続ビルドの1つで再構成された場合(例:make、one 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}")

参照

8
Florian

変数をエクスポートする必要があります。たとえばLinuxの場合:

export EnvironmentVariableName=foo

CMAKEでは、エクスポートされていない変数は空です。

4
P51DAce

(システムプロパティを使用して変更する)環境変数は、新しいサブシェルを作成するときにのみサブシェルに伝達されます。

User env varsを変更したときにコマンドラインプロンプト(DOSまたはcygwin)を開いていた場合、それらは表示されません。

ユーザー設定を変更した後、新しいコマンドラインプロンプトを開く必要があります。

Unix/Linuxの同等の機能は、.bash_rcに行を追加することです。値を取得するには、新しいシェルを起動する必要があります。

1
Mark Lakata