1

我从根目录有两个子目录,其中一个有以下行:

 set(${LIBNAME}_publicheaders
     LocalizeResource.h
 )

我希望能够从另一个子目录访问这个变量。我怎样才能做到这一点?

4

2 回答 2

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同一个子目录 (abc) 内,则需要先检索该子目录的值。

因此,虽然这可能是一个不太常见的解决方案,但它的优点是它不会用子目录特定的变量“污染”全局命名空间——这适用于引用另一个子目录的子目录。

于 2013-05-09T00:30:03.990 回答
4

PARENT_SCOPE您可以使用set() 选项在父作用域中设置变量

例子:

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

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

然而,这意味着该变量不仅在其他子目录中可用,而且在同一级别的任何其他子目录中也可用。

于 2013-05-08T18:02:15.973 回答