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


104

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

$ENV{EnvironmentVariableName}

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


2
与えられた答えには何も追加されないので、この質問を削除するだけでよいと思います。
Tom Brito

11
これは、CMakeで環境変数を取得する方法に関するGoogleの最初のヒットです。質問にすでに回答が含まれているのは少し奇妙なことかもしれませんが、IMOを削除しないでください。
Andreas Haferburg、2014年

2
答えが完全に「何もない」場合、この質問と答えはどうしてそれほど多くの賛成票を持つのでしょうか。
Ludwik、2015

3
@Ludwikは、ユーザー固有の環境変数がCMakeスクリプトで使用できないという問題に答えるためです。
ロバート

3
問題の一部は、「ユーザー固有の環境変数」と「通常のマシン全体の環境変数」の分割が、Windowsに非常に固有の概念であることです。Unixライクなシステムは、環境変数がどこに設定されているかを気にしません。それらはすべて同じです。
James Moore

回答:


83

変数をCMakeスクリプトに取り込む

cmake呼び出しで行に変数を渡すことができます:

FOO=1 cmake

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

export FOO=1

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

$ENV{FOO}

13

呼び出すこともできます クロスプラットフォームの方法でこれを行うには、それ自体:

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}")

参照


4

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

export EnvironmentVariableName=foo

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


5
それらをエクスポートする必要はありません!例:CMakeLists.txt IF($ENV{COVERAGE}) ... END()、呼び出し:COVERAGE=1 cmake ..。確かに、中身はチェックしていませんし、チェックするかどうかもわかりません。しかし、それが定義されているかどうかにかかわらず、それは確かにテストのために機能します!
Janus Troelsen、2011

1
前の行で変数を定義する場合は、エクスポートが必要です。同じ行で定義された変数のみがエクスポートを必要としませんが、どちらの方法でエクスポートするかを推測することはできません。
Alexis Wilke 2013

1

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

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

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

Unix / Linuxで同等のものは、.bash_rcに行を追加します。値を取得するには、新しいシェルを開始する必要があります。


Windowsの場合、あなたも実行することができSET var_name=var_value、現在のDOSセッションで環境変数を設定するか、SETX var_name var_value次を参照してください。恒久的に設定するためにセットし、SETXをローカル設定も面白いかもしれません。
WillC 2018年

Unix / Linuxの場合、通常は実行source ~/.bashrcして、変更した.bashrcファイルを再実行し、現在のセッションに新しい値を取得することもできます。
WillCは
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.