CMake : 스크립트에서 접근 가능한 모든 변수를 인쇄


222

CMake에서 모든 액세스 가능한 변수를 인쇄하는 방법이 있는지 궁금합니다. --help-variables옵션 에서와 같이 CMake 변수에 관심이 없습니다 . 정의한 변수 또는 포함 된 스크립트로 정의 된 변수에 대해 이야기하고 있습니다.

나는 현재 다음을 포함하고 있습니다 :

INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityCXX.cmake)

그리고 나는 모든 파일을 살펴보고 사용 가능한 것을 읽지 않고 여기에있는 모든 변수를 인쇄 할 수 있기를 바랐습니다. 학습과 발견을 돕는 것이 좋을 것입니다. 디버깅 / 개발을위한 것입니다.

이것은 Lua의 현재 범위에 액세스 할 수있는 모든 로컬 변수 인쇄 의 질문과 비슷 하지만 CMake!

누구든지 이것을 했습니까?

답변:


368

get_cmake_property함수를 사용하여 다음 루프는 정의 된 모든 CMake 변수와 해당 값을 인쇄합니다.

get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=${${_variableName}}")
endforeach()

이것은 또한 선택적인 정규식을 사용하여 이름이 일치하는 변수의 서브 세트 만 인쇄 할 수있는 편리한 함수에 임베드 될 수 있습니다.

function(dump_cmake_variables)
    get_cmake_property(_variableNames VARIABLES)
    list (SORT _variableNames)
    foreach (_variableName ${_variableNames})
        if (ARGV0)
            unset(MATCHED)
            string(REGEX MATCH ${ARGV0} MATCHED ${_variableName})
            if (NOT MATCHED)
                continue()
            endif()
        endif()
        message(STATUS "${_variableName}=${${_variableName}}")
    endforeach()
endfunction()

환경 변수를 인쇄하려면 CMake의 명령 모드를 사용 하십시오 .

execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")

매우 유용한 스 니펫입니다. 명령 행에서 설정 한 ENV 변수가 인쇄되지 않는 이유는 무엇 입니까?
IgorGanapolsky

2
@ Geremia 당신은이 코드 블록을 파일 myfile.txt에 복사 하고 실행할 수 있습니다 : cmake -P myfile.txt
Idok

2
VARIABLES"현재 디렉토리에 정의 된 변수"만 나열합니다. cmake.org/cmake/help/latest/prop_dir/…
CivFan

1
출력을 볼 수 있도록 명령 STATUS에서 를 제거해야했습니다 message.
luator

나를 위해 작동하지 않았다. CMAKE_ *로 시작하는 변수 모두 제가했습니다
C 존슨

173

다른 방법은 간단히 사용하는 것입니다.

cmake -LAH

로부터 :

-L[A][H]

고급 캐시되지 않은 변수를 나열합니다.

캐시 변수 나열은 CMake를 실행하고 CMake 캐시에서 INTERNAL또는 로 표시되지 않은 모든 변수를 나열합니다 ADVANCED. 현재 CMake 설정을 효과적으로 표시합니다 ...].

A지정 하면 고급 변수도 표시됩니다.

H지정 하면 각 변수에 대한 도움말도 표시됩니다.


4
빌드 디렉토리에서이 작업을 수행
jtsagata

5
이 방법은 시스템 변수 (WIN32, UNIX, APPLE 등)를 인쇄하지 않습니다.
holocronweaver 2012 년

4
사용 가능한 모든 라이브러리를 인쇄하지 않고 캐시 된 라이브러리 만 인쇄합니다.
rafalcieslak

2
이것은 모든 변수를 인쇄하지 않고 캐시 된 변수 만 인쇄합니다. (FTFY rafa)
Qwertie

9

ccmake캐시 된 변수를 대화식으로 검사하는 좋은 대화식 옵션입니다 ( option(또는 set( CACHE:

sudo apt-get install cmake-curses-gui
mkdir build
cd build
cmake ..
ccmake ..


3
유용한 도구 :) 그러나 질문은 모든 변수를 인쇄하도록 요구합니다. 그러나 이것은 캐시 된 변수 만 나타냅니다.
OLL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.