如何向CMake的execute_process传递含分号的参数
解决CMake execute_process传递含分号参数的问题
核心解决方案:使用生成器表达式$<SEMICOLON>
CMake的生成器表达式会在命令执行阶段被解析,不会被当作列表分隔符拆分参数。直接在需要分号的位置替换为$<SEMICOLON>即可:
execute_process( COMMAND foo bar "with$<SEMICOLON>semicolon" RESULT_VARIABLE EXEC_RESULT OUTPUT_VARIABLE EXEC_OUTPUT ERROR_VARIABLE EXEC_ERROR )
执行后,目标进程会收到完整参数"with;semicolon",不会被拆分成两个参数。
备选方案:变量中转(适用于复杂参数场景)
如果参数需要提前定义在变量中,可以先通过生成器表达式构造变量:
set(MY_ARG "with$<SEMICOLON>semicolon") execute_process( COMMAND foo bar "${MY_ARG}" RESULT_VARIABLE EXEC_RESULT )
注意必须用双引号包裹变量,确保生成器表达式被正确解析。
避坑提醒
- 不要直接用反斜杠转义分号(
\;):CMake处理列表时会忽略反斜杠,依然会把\;后的内容拆分为新参数。 - 不要依赖引号直接包裹分号:CMake字符串解析中,引号内的分号依然会被当作列表分隔符,导致参数拆分。
内容的提问来源于stack exchange,提问作者PluginPenguin
相关产品推荐
相关产品推荐

