Как обмениваться переменными между различными файлами CMake
Как я делю переменные между различными файлами CMake, и я показываю следующие примеры, чтобы проиллюстрировать мой вопрос:
Главный
cmake_minimum_required(VERSION 2.6)
project(test)
set(Var3 "Global variable")
add_subdirectory(${test_SOURCE_DIR}/exe)
add_subdirectory(${test_SOURCE_DIR}/dll)
EXE-файл
set(Var1 "this is variable 1")
set(Var1 ${Var1} " added to varible 1")
message(STATUS ${Var1})
Файл DLL
set(Var2 "this is variable 2")
message(STATUS ${Var2})
message(STATUS ${Var1})
message(STATUS ${Var3})
В этом примере Var3 можно увидеть в файлах CMake exe
а также dll
как это определено в Main
, Тем не менее, Var1, который определен в exe
, не будет наблюдаться в dll
, Мне было просто любопытно: есть ли способ сделать Var1 определенным в exe
наблюдаемый в dll
?
2 ответа
Помимо того, что правильно сказал Тадеуш, вы можете сделать переменную видимой на любом уровне (не только один!), Используя
set(Var1 "This is variable 1" CACHE INTERNAL "")
Переменная будет доступна для всех инструкций CMake, которые следуют этой инструкции, поэтому, например, она не будет доступна для дочернего каталога, который добавляется до каталога, в котором определена эта переменная.
Области переменной видимости образуют дерево. Файлы CMakeFiles.txt, добавленные с add_subdirectory
иметь доступ к переменным, определенным как в самих себе, так и в родительской области (глобальная область верхнего уровня в вашем примере).
Вы можете экспортировать переменную на один уровень выше, используя:
set(Var1 "This is variable 1" PARENT_SCOPE)