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)
使用宏而不是函数似乎是这样做的:
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函数为变量创建局部范围,宏使用全局范围.
| 归档时间: |
|
| 查看次数: |
5724 次 |
| 最近记录: |