CMake: พิมพ์ตัวแปรที่เข้าถึงได้ทั้งหมดในสคริปต์


222

ฉันสงสัยว่ามีวิธีพิมพ์ตัวแปรที่เข้าถึงได้ทั้งหมดใน CMake หรือไม่ ฉันไม่สนใจตัวแปร CMake - ใน--help-variablesตัวเลือก ฉันกำลังพูดถึงตัวแปรที่ฉันกำหนดไว้หรือตัวแปรที่กำหนดโดยสคริปต์ที่รวมไว้

ฉันกำลังรวมถึง:

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

และฉันหวังว่าฉันจะสามารถพิมพ์ตัวแปรทั้งหมดที่อยู่ที่นี่แทนที่จะต้องผ่านไฟล์ทั้งหมดและอ่านสิ่งที่มีอยู่ - ฉันอาจพบว่าตัวแปรบางตัวที่ฉันไม่รู้เกี่ยวกับสิ่งนั้นอาจมีประโยชน์ มันจะเป็นการดีที่จะช่วยการเรียนรู้และการค้นพบ มันเป็นอย่างเคร่งครัดสำหรับการแก้จุดบกพร่อง / การพัฒนา

นี่คล้ายกับคำถามในพิมพ์ตัวแปรท้องถิ่นทั้งหมดที่เข้าถึงขอบเขตปัจจุบันใน Luaได้ แต่สำหรับ CMake!

มีใครทำเช่นนี้?

คำตอบ:


370

การใช้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คำสั่งเพื่อให้สามารถมองเห็นผลลัพธ์ได้
ปรึกษา

ไม่ได้ผลสำหรับฉัน ทั้งหมดที่ฉันได้รับคือตัวแปรที่เริ่มต้นด้วย CMAKE_ *
C Johnson

173

อีกวิธีหนึ่งก็คือใช้:

cmake -LAH

จากmanpage :

-L[A][H]

แสดงรายการตัวแปรแคชที่ไม่ใช่ขั้นสูง

แสดงรายการแคชตัวแปรจะเรียกใช้ CMake และแสดงรายการตัวแปรทั้งหมดจากแคช CMake ที่ไม่ได้ทำเครื่องหมายว่าเป็นINTERNALหรือADVANCEDหรือสิ่งนี้จะแสดงการตั้งค่า CMake ปัจจุบันอย่างมีประสิทธิภาพ [... ]

ถ้า Aระบุไว้มันจะแสดงตัวแปรขั้นสูงด้วย

หากHระบุไว้มันจะแสดงวิธีใช้สำหรับตัวแปรแต่ละตัว


4
ทำเช่นนี้ในไดเรกทอรีการสร้างของคุณ
jtsagata

5
โปรดทราบว่าวิธีนี้จะไม่พิมพ์ตัวแปรระบบ (WIN32, UNIX, APPLE, ฯลฯ )
holocronweaver

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.