CMAKE:在函数中创建和构建列表 - 包含目录或全局范围

Has*_*yed 8 c++ compilation cmake build-system

我并不完全熟悉cmake的范围规则.我需要在为IDL执行RPC代码生成的同时构建各种文件的列表.

function(generate_rpc file_name)
  set(PROTO_FILES ${PROTO_FILES} ${file_name})
endfunction(generate_rpc)

generate_rpc(BasicProtocol.proto)
generate_rpc(dummy.proto)

message(STATUS "PROTO FILES: ${PROTO_FILES}")
Run Code Online (Sandbox Code Playgroud)

该列表每次都是空的.我需要可以在函数内构建的可追加列表.

uel*_*rdi 11

虽然宏的定义和调用方式与函数相同,但它们之间存在一些差异,例如在SCOPE和执行时.

范围:

  • 宏:具有全球范围.
  • 功能:具有本地范围,无论您是否指定.

执行:它的工作方式类似于C++或C.

  • 宏:在配置之前将变量名称替换为字符串.

  • 功能:在执行期间替换变量名称.

总之,在set命令中添加PARENT_SCOPE标志

set(PROTO_FILES $ {PROTO_FILES} $ {file_name} PARENT_SCOPE)


tib*_*bur 8

使用宏而不是函数似乎是这样做的:

macro(generate_rpc file_name)
  set(PROTO_FILES ${PROTO_FILES} ${file_name})
endmacro(generate_rpc)
Run Code Online (Sandbox Code Playgroud)

编辑:根据http://www.cmake.org/cmake/help/syntax.html(应该在手册页,IMO):

CMake函数为变量创建局部范围,宏使用全局范围.