Ответ 1
Если у вас есть существующий файл кеша, вы можете сделать:
grep MY_CMAKE_VARIABLE CMakeCache.txt
Если у вас еще нет файла кэша, и вы хотите увидеть, какие параметры есть в файле CMakeLists.txt, вы можете сделать (в другом каталоге, так как это будет писать файл кэша):
cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE
который вернет вам что-то вроде
<VARIABLE>:<TYPE>=<VALUE>
Если это расширенная переменная, добавьте флаг -A к той же команде, и она будет содержать расширенные переменные. Конечно, если вы хотите только значение, вы можете сделать:
cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE | cut -d "=" -f2
ИЗМЕНИТЬ
Например, с CMakeLists.txt, который:
cmake_minimum_required(VERSION 2.8)
project(test)
include(otherFile.txt)
set(MY_VAR "Testing" CACHE STRING "")
И где otherFile.txt:
set(MY_OTHER_VAR "Hi" CACHE STRING "")
Команда (выполняется из другого каталога):
cmake -L ../cmaketest
дает:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/tgallagher/cmaketest-build
-- Cache values
CMAKE_BUILD_TYPE:STRING=
CMAKE_INSTALL_PREFIX:PATH=/usr/local
MY_OTHER_VAR:STRING=Hi
MY_VAR:STRING=Testing
Таким образом, он показывает переменные из других файлов. Он должен разобрать всю сборку. Проблема заключается в том, что он не будет отображать переменные, которые не отмечены CACHE. И он не будет показывать какие-либо кэшированные INTERNAL, и будет показывать только ADVANCED, если вместо -L используется -LA.
Если ваши переменные отмечены как INTERNAL, а не CACHE'd вообще, то в CMake нет способа вытащить его. Но переменные non-CACHE'd должны быть временными, поэтому я не уверен, почему вы нуждаетесь в них вне среды сборки в любом случае.