Переменная общего доступа CMAKE между подкаталогами - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь получить доступ от foo (см. Ниже) к переменной, которая вычисляется в bar.Подход, который я наблюдал на SO, заключается в добавлении CACHE INTERNAL к SET.Это работает, но я должен вызвать генерацию файлов GNU Make дважды.Похоже, переменная не находится в кеше для первого запуска, поэтому я получаю просто пустое значение.

Структура

CMakeList.txt (top)--
                    |
                    -- CMakeList.txt (foo)
                    |
                    -- CMakeList.txt (bar)

Содержание Top CMakeList.txt

...
...
ADD_SUBDIRECTORY(foo)
ADD_SUBDIRECTORY(bar)
...
...

Foo CMakeList.txt

...
...
    TARGET_INCLUDE_DIRECTORIES(MyProject SYSTEM PRIVATE
        ${BarPath}
    )
    MESSAGE(STATUS "Bar include path " ${BarPath})
...
...

Бар CMakeList.txt

...
...
SET(BarPath ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "Path to generated files.")
...
...

Затем, когда я запускаю cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=. -G "CodeBlocks - Unix Makefiles", MESSAGE из файла Foo возвращает пустое BarPath.Запустите его еще раз, и ожидаемое значение будет введено в переменную.Что не так?

1 Ответ

0 голосов
/ 26 сентября 2018

Foo/CMakeLists.txt выполняется cmake до Bar/CMakeLists.txt.

При первом запуске cmake:

  1. ${BarPath} не определено и Foo/CMakeLists.txt печатаетон пуст.
  2. ${BarPath} определяется и кэшируется как Bar/CMakeLists.txt.

Когда вы запускаете его во второй раз:

${BarPath} находится в кеше при печати Foo/CMakeLists.txt. ${BarPath} переопределяется и кешируется Bar/CMakeLists.txt.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...