CMake:跨子目录访问变量

use*_*549 1 cmake

我有一个来自root的两个子目录,其中一个有行:

 set(${LIBNAME}_publicheaders
     LocalizeResource.h
 )
Run Code Online (Sandbox Code Playgroud)

我希望能够从其他子目录访问此变量.我怎样才能做到这一点?

Fra*_*ser 6

@ JoakimGebart的答案可能是更常见的方式.但是,您可以同时使用get_directory_property直接从第二子目录内实现你以后.

我在你的评论中看到,你已经习惯了${LIB_NAME}_publicheaders,但在你的问题中,你有${LIBNAME}_publicheaders.这可能是导致问题的原因,因为命令应该像这样工作:

get_directory_property(MyVar
    DIRECTORY ${CMAKE_SOURCE_DIR}/abc
    DEFINITION ${LIBNAME}_publicheaders)
Run Code Online (Sandbox Code Playgroud)

但是,有几个附带条件:

  1. 在subdir中设置变量必须调用它.即你必须确保add_subdirectory(abc)在使用它之前调用add_subdirectory.
  2. 如果LIBNAME也在set同一个子目录(abc)中,则需要首先检索该值.

因此,虽然这可能是一种不太常见的解决方案,但它的优势在于它不会使用特定于子目录的变量"污染"全局命名空间 - 这可以通过引用另一个子目录的子目录来实现.