2015-07-10 2 views
5

Предположим, у меня есть пакет под названием Foo. Если я запустил CMake в файле CMakeLists.txt, который содержит find_package(Foo), тогда я могу распечатать значения таких переменных, как ${Foo_LIBRARIES} и ${Foo_INCLUDES}.Отображение переменных CMake

Есть ли простой способ отображения этих переменных без необходимости запуска CMake в файле CMakeLists.txt и без необходимости вручную проверять файл config.cmake?

ответ

1

Эти переменные, как правило, жестко закодированы в FindFoo.cmake, так что их невозможно извлечь, не запуская сначала функцию. Обратите внимание, что иногда значение Foo_LIBRARIES зависит от конфигурации системы, которая неизвестна до запуска find_package (Foo).

1

Запустите CMake и посмотрите на кеш с помощью ccmake. Затем вы получите все переменные.

Или запустите CMake с помощью -LH., после чего вы получите все переменные, напечатанные после конфигурации.

Так что я думаю, что невозможно получить переменные без запуска CMake.

1

Запустить cmake в режиме поиска. Пример для отображения package`s включают в себя каталоги:

cmake -DNAME=ZLIB -DCOMPILER_ID=GNU -DLANGUAGE=C -DMODE=COMPILE --find-package 

Пример для отображения библиотеки:

cmake -DNAME=ZLIB -DCOMPILER_ID=GNU -DLANGUAGE=C -DMODE=LINK --find-package 

NAME должен быть установлен на имя пакета. Вы можете получить COMPILER_ID по телефону this page. LANGUAGE может быть C, CXX или Fortran.

2

Вы спросили: (1) Есть ли простой способ отображения этих переменных без запуска cmake в файле CMakeLists.txt и (2) без необходимости вручную проверять файл config.cmake?

Я могу дать ответ «да» на (2), но он требует, чтобы вы (повторно) запускали cmake. Но поскольку вы можете повторно запустить свой шаг настройки cmake, просто выполнив cmake . в каталоге сборки, повторное выполнение cmake не должно препятствовать вам пробовать этот подход. Мой ответ приведен в этом SO answer и использует команду get_cmake_property. Вот этот код, инкапсулированный в макрос cmake, print_all_variables, поэтому я могу использовать его при отладке моих сценариев cmake.

macro(print_all_variables) 
    message(STATUS "print_all_variables------------------------------------------{") 
    get_cmake_property(_variableNames VARIABLES) 
    foreach (_variableName ${_variableNames}) 
     message(STATUS "${_variableName}=${${_variableName}}") 
    endforeach() 
    message(STATUS "print_all_variables------------------------------------------}") 
endmacro() 
Смежные вопросы