CMake에서 사용자 환경 변수를 검색하는 방법 (Windows)


104

CMAKE에서 일반 시스템 전체 환경 변수를 검색하는 방법을 알고 있습니다.

$ENV{EnvironmentVariableName}

하지만 사용자 특정 환경 변수를 검색 할 수 없습니다. 가능하고 어떻게?


2
주어진 답변에 아무것도 추가하지 않기 때문에이 질문을 삭제해야한다고 생각합니다.
Tom Brito

11
이것은 CMake에서 환경 변수를 검색하는 방법에 대한 Google의 첫 번째 히트작입니다. 질문에 이미 답변이 포함되어 있다는 것이 조금 이상 할 수 있지만 IMO를 삭제해서는 안됩니다.
Andreas Haferburg 2014 년

2
도대체이 질문과 답변이 완전히 "아무것도"인 경우, 얼마나 많은 찬성표를 가지고 있습니까?
Ludwik

3
@Ludwik는 CMake 스크립트에서 사용자 특정 환경 변수를 사용할 수 없다는 문제에 답하기 때문입니다.
로버트

3
문제의 일부는 "사용자 별 환경 변수"와 "일반적인 시스템 전체 환경 변수"간의 분리가 Windows에 매우 특정한 개념이라는 것입니다. 유닉스 계열 시스템은 환경 변수가 어디에 설정되어 있는지 상관하지 않습니다. 그들은 모두 동일합니다.
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가 연속 빌드 중 하나로 재구성하는 경우 (예 : make, 하나 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

1

시스템 속성을 사용하여 수정 한 환경 변수는 새 하위 셸을 만들 때만 하위 셸로 전파됩니다.

사용자 환경 변수를 변경할 때 명령 줄 프롬프트 (DOS 또는 cygwin)를 연 경우에는 표시되지 않습니다.

사용자 설정을 변경 한 후 새 명령 줄 프롬프트를 열어야합니다.

Unix / Linux에서 이에 상응하는 것은 .bash_rc에 한 줄을 추가하는 것입니다. 값을 얻으려면 새 셸을 시작해야합니다.


Windows의 경우 실행 SET var_name=var_value하여 현재 DOS 세션에서 환경 변수 SETX var_name var_value를 설정 하거나 영구적으로 설정할 수도 있습니다. setsetx를 참조하십시오 . 지역 설정 도 흥미로울 수 있습니다.
WillC

Unix / Linux의 경우 일반적으로 source ~/.bashrc실행하여 수정 된 .bashrc파일 을 다시 실행하고 현재 세션에 새 값을 가져올 수도 있습니다.
WillC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.