2013-05-08 4 views
1

У меня есть два подкаталогов от корня, на котором имеется линия:CMake: переменный доступ через подкаталоги

set(${LIBNAME}_publicheaders 
    LocalizeResource.h 
) 

Я хочу, чтобы иметь возможность получить доступ к этому переменному из другого подкаталога. Как я могу это сделать?

+0

Я пытаюсь использовать: get_directory_property ($ {VAR} DIRECTORY "$ {CMAKE_SOURCE_DIR}/а" определение "$ {LIB_NAME} _publicheaders") , но я не уверен, что если мой синтаксис правильно – user1607549

ответ

6

@ Ответ JoakimGebart, вероятно, является более распространенным способом решения этой проблемы. Тем не менее, вы можете также использовать get_directory_property непосредственно изнутри второго суббайта, чтобы добиться того, что вам нужно.

Я вижу, что в вашем комментарии вы использовали ${LIB_NAME}_publicheaders, но в вашем вопросе у вас есть ${LIBNAME}_publicheaders. Это может быть причиной ваших проблем, так как команда должна работать так:

get_directory_property(MyVar 
    DIRECTORY ${CMAKE_SOURCE_DIR}/abc 
    DEFINITION ${LIBNAME}_publicheaders) 

Однако есть несколько оговорок:

  1. Это будет называться после установки переменного в поддире. т. е. вы должны были бы вызывать add_subdirectory(abc) до add_subdirectory для того, где это будет использоваться.
  2. Если LIBNAME также является set внутри одного и того же subdir (abc), вам нужно будет получить значение для этого в первую очередь.

Таким образом, хотя это, вероятно, менее распространенное решение, он имеет то преимущество, что он не «загрязнять» глобальное пространство имен подкаталогов конкретных переменными - это работает от с подкаталогом со ссылкой на другой подкаталог.

4

Вы можете установить переменную в родительской области с помощью опции PARENT_SCOPE установить()

Пример:

set(${LIBNAME}_publicheaders 
    LocalizeResource.h 
    PARENT_SCOPE 
) 

См http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:set

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

+0

я прочитал, что Я могу использовать get_directory_property для получения переменной. Вы знаете, верно ли это? – user1607549

+0

Я считаю, что переменная должна просто передаваться в подкаталоги без вызова get_directory_property, поэтому вы должны иметь возможность писать '$ {mylib_publicheaders}' в другом подкаталоге, чтобы получить список заголовков, которые вы установили. –

+0

Но дело не только в корне. У меня есть переменная, заданная в подкаталоге. Я попробовал, и он дал мне пусто – user1607549

Смежные вопросы