CMake脚本命令行传参疑问:CMAKE_ARGV包含--是否与书籍描述矛盾?
CMAKE_ARGC/CMAKE_ARGV为何包含
--标记及cmake命令本身参数? 作者的表述没有错误,只是未明确说明完整细节:
CMAKE_ARGV变量会记录整个命令行的所有参数,包括cmake程序本身、-P选项、脚本文件名,甚至用作分隔的--标记。你执行的命令cmake -P file.cmake -- arg,参数序列自然就是cmake、-P、file.cmake、--、arg,因此CMAKE_ARGC=5是完全正确的结果。- 作者提到的“通过
--标记之后的内容向脚本传递参数”,核心含义是**--之后的内容会被CMake完整保留,不会被当作自身的命令行选项解析**,但这些自定义参数只是CMAKE_ARGV中的一部分,而非全部。 - 若你只想获取自己传递的自定义参数,有两种处理方式:
- 手动过滤:从
CMAKE_ARGV的索引4开始取(索引0为cmake程序名,1为-P,2为脚本名,3为--); - 使用CMake 3.19+新增的
CMAKE_SCRIPT_ARGC和CMAKE_SCRIPT_ARGV<n>变量:这两个变量会直接忽略cmake自身参数和--标记,仅统计并存储你传递的自定义参数。比如执行同样的命令,CMAKE_SCRIPT_ARGC会返回1,CMAKE_SCRIPT_ARGV0的值就是arg,这更符合多数场景下的使用需求。
- 手动过滤:从
内容的提问来源于stack exchange,提问作者user22343737
相关产品推荐
相关产品推荐

