CMAKE:在函数中创建和构建一个列表——使用目录或全局作用域
CMAKE: Creating and building a list within a function -- with directory, or global scope
我不太熟悉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}")
每次列表都为空。我需要一个可追加的列表,可以从一个函数内建立。
使用宏而不是函数似乎可以做到这一点:
macro(generate_rpc file_name)
set(PROTO_FILES ${PROTO_FILES} ${file_name})
endmacro(generate_rpc)
编辑:根据http://www.cmake.org/cmake/help/syntax.html(应该在手册页,IMO):
CMake函数为变量创建局部作用域,而宏使用全局作用域。
尽管宏的定义和调用方式与函数相同,但它们之间存在一些差异,例如在SCOPE和执行时。
范围:
- 宏:具有全局作用。
- 函数:无论你是否指定,它都有一个局部作用域。
执行:它的工作方式类似于c++或C
-
宏:配置前将变量名替换为字符串
-
函数:变量名在执行过程中被替换
总之,在set命令
中添加PARENT_SCOPE标志集(PROTO_FILES $ {PROTO_FILES} $ {file_name} PARENT_SCOPE)
相关文章:
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何在C++中使用pybind11加载一个pickle python列表
- 链表,将列表复制到另一个列表
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 测试迭代器是否位于列表中的最后一个
- 我如何创建一个列表,然后从中创建两个列表,其中一个用于偶数,另一个用于奇数?
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 给定一个源文件,有没有办法要求 gcc 返回仅直接包含的头文件的列表?
- 如何将列表从一个类复制到另一个类
- 删除链接列表中剩余的最后一个节点
- 处理程序的模块列表中有一个错误的模块"WebSocketModule"
- 避免在使用链接列表从 deque 中删除最后一个节点时出现内存泄漏
- 在 c++ 中创建一个类似 python 的列表
- 将两个列表合并为一个蛇形列表
- 如何将一个单词拆分成字母,并将它们放入一个无序的列表/集合中
- 遍历列表包含排除最后一个元素的内容
- 是否可以使用OpenMP并行化一个列表,该列表可以在每次迭代中添加新元素