我有一个来自root的两个子目录,其中一个有一行:
set(${LIBNAME}_publicheaders
LocalizeResource.h
)
我希望能够从其他子目录访问此变量。我怎么能这样做?
答案 0 :(得分:6)
@ JoakimGebart的回答可能是更常见的解决方法。但是,你可以直接从第二个子目录中使用get_directory_property
来实现你所追求的目标。
我在您的评论中看到,您已使用${LIB_NAME}_publicheaders
,但在您的问题中,您有${LIBNAME}_publicheaders
。这可能是导致问题的原因,因为命令应该像这样工作:
get_directory_property(MyVar
DIRECTORY ${CMAKE_SOURCE_DIR}/abc
DEFINITION ${LIBNAME}_publicheaders)
但是,有几个附带条件:
add_subdirectory(abc)
之前调用add_subdirectory
来使用它。LIBNAME
也是set
,则需要先检索该值。因此,尽管这可能是一种不太常见的解决方案,但它的优势在于它不会使用特定于子目录的变量“污染”全局命名空间 - 这可以通过引用另一个子目录的子目录来实现。
答案 1 :(得分:4)
您可以使用PARENT_SCOPE
选项设置父作用域中的变量来设置()
示例:
set(${LIBNAME}_publicheaders
LocalizeResource.h
PARENT_SCOPE
)
请参阅http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:set
但是,这意味着该变量不仅可以在其他子目录中使用,而且可以在同一级别的任何其他子目录中使用。