宏范围内的Cmake全局变量

Laz*_*zao 1 macros scope list cmake

我正在尝试创建一个全局列表,我希望它附加在宏中.这是我的设置:

project
\__. CMakeLists.txt
\__. level1
    \__. CMakeLists.txt
    \__. level2a
        \__. CMakeLists.txt
    \__. level2b
        \__. CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

这是我的顶级CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

macro(listappend var)
    list(APPEND MY_GLOBAL_LIST "${var}")
    message(STATUS "LIST IN MACRO SCOPE: ${MY_GLOBAL_LIST}")
endmacro(listappend)

set(MY_GLOBAL_LIST "")

add_subdirectory(level1)
message(STATUS "LIST: ${MY_GLOBAL_LIST}")

# call something here with the global list
Run Code Online (Sandbox Code Playgroud)

level1 CMakeLists.txt只做两个add_subdirectory().

level2 CMakeLists.txt如下:

listappend("test2a")
Run Code Online (Sandbox Code Playgroud)

最后,这是我的输出:

[lz@mac 17:15:14] ~/tmp/cmake/build$ cmake ..
-- LIST IN MACRO SCOPE: test2a
-- LIST IN MACRO SCOPE: test2b
-- LIST: 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/lz/tmp/cmake/build
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法,在宏的范围内附加一个全局列表,而不必将全局列表变量作为宏的参数.我不确定是否可能.

我也试过CACHE INTERNAL标志,但它没有帮助.我真的不怎么处理这个.

谢谢你的帮助 :)

Tsy*_*rev 5

CMake GLOBAL属性是实现全局列表的一种很好的方式,它在不同的级别进行了修改:

# Describe property
define_property(GLOBAL PROPERTY MY_GLOBAL_LIST
    BRIEF_DOCS "Global list of elements"
    FULL_DOCS "Global list of elements")
# Initialize property
set_property(GLOBAL PROPERTY MY_GLOBAL_LIST "")

# Macro for add values into the list
macro(listappend var)
    set_property(GLOBAL APPEND PROPERTY MY_GLOBAL_LIST "${var}")
endmacro(listappend)

# Do something
add_subdirectory(level1)

# Read list content
get_property(my_list_content GLOBAL PROPERTY MY_GLOBAL_LIST)
message(STATUS "LIST: ${my_list_content}")
Run Code Online (Sandbox Code Playgroud)