Как обмениваться переменными между различными файлами 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)
Другие вопросы по тегам