foreach - 使用条件语句将 CMake 单元测试宏压缩为一个宏
问题描述
我想减少下面代码中的 CMake 宏调用,并将其压缩为一个 CMake 宏调用,以使用 if-else 语句执行我的操作。
我需要ctest
通过传递不同的高度和宽度参数来运行(使用 CMake)。
请将此视为一些算术运算。
就我而言,根据宽度,我的高度范围将像这样变化:
Width = 8 ,then height will be 8 16 24
Width = 16 ,then height will be 16 24
Width = 24 ,then height will be 24 32
那么,是否可以在 CMake 文件中使用一些 if-else 语句来进行一次调用EXECUTE_OPERATION(${width_val} ${height_val} )
?
我当前的 CMake 文件如下所示:
set(width 8)
set(size 8 16 24 )
foreach(size_val ${size}
foreach(width_val ${width})
EXECUTE_OPEARTION(${width_val} ${height_val} )
endforeach(width_val)
endforeach(size_val)
---------------------------
set(width 16)
set(height 16 24 )
foreach(height_val ${height}
foreach(width_val ${width})
EXECUTE_OPEARTION(${width_val} ${height_val} )
endforeach(width_val)
endforeach(size_val)
---------------------------
set(width 24)
set(size 24 32 )
foreach(size_val ${size}
foreach(width_val ${width})
EXECUTE_OPEARTION(${width_val} ${height_val} )
endforeach(width_val)
endforeach(size_val)
---------------------------
我尝试使用以下方法执行此操作,但没有成功:
set(width 8 16 24 )
if(width == 8)
set(height 8 16 24 )
elif(width == 16)
set(height 16 24 )
elif(width == 24)
set(height 24 32)
foreach(height_val ${height}
foreach(width_val ${width})
EXECUTE_OPEARTION(${width_val} ${height_val} )
endforeach(width_val)
endforeach(size_val)
解决方案
您的 if 语句似乎具有 Python 语法。您应该使用elseif
而不是elif
. 此外,用于测试相等性的 CMake if 语句语法EQUAL
是,而不是==
。
此外,您需要在块内移动 if 语句块才能使其foreach()
正常工作。尝试这样的事情:
# Define the width values to iterate through.
set(width 8 16 24)
# Iterate through each width value.
foreach(width_val ${width})
# Set the height values, based on the current width value.
if(${width_val} EQUAL 8)
set(height 8 16 24)
elseif(${width_val} EQUAL 16)
set(height 16 24)
elseif(${width_val} EQUAL 24)
set(height 24 32)
endif()
# Loop through each height value.
foreach(height_val ${height})
message("Calling EXECUTE_OPEARTION() with args: Width: ${width_val}, Height: ${height_val}")
EXECUTE_OPEARTION(${width_val} ${height_val})
endforeach(height_val)
endforeach(width_val)
这将打印以下内容,验证函数是否使用正确的参数调用:
Calling EXECUTE_OPEARTION() with args: Width: 8, Height: 8
Calling EXECUTE_OPEARTION() with args: Width: 8, Height: 16
Calling EXECUTE_OPEARTION() with args: Width: 8, Height: 24
Calling EXECUTE_OPEARTION() with args: Width: 16, Height: 16
Calling EXECUTE_OPEARTION() with args: Width: 16, Height: 24
Calling EXECUTE_OPEARTION() with args: Width: 24, Height: 24
Calling EXECUTE_OPEARTION() with args: Width: 24, Height: 32
推荐阅读
- embedded-linux - 在嵌入式 Linux 中如何初始化外围设备
- php - 如何在 Wamp 服务器上使用或不使用重定向的情况下删除 URL 目录末尾的反斜杠
- wordpress - WP Woo - 每次调用链接时检查端点是否存在
- javascript - 尝试通过套接字事件播放视频时出现 DOMException
- javascript - 如何用“字符串”替换 Google 表格列中非空单元格的值?
- node.js - 如何使用 nodejs 中的请求模块为 OAuth2 编写 POST 请求
- tesseract - 正方体错误:警告。无效的分辨率 0 dpi。改用 70
- solr - json 中的 Solr 方面字段结果显示为逗号分隔列表而不是字典
- swift - 如何使用与我找到对等点的名称不同的名称邀请对等点加入会话?
- java - 从 wsdl 生成 Java 代理类