CMake separate_arguments用法详解

separate_arguments 是 CMake 中用于将字符串分割成参数列表的命令,适用于处理包含空格的参数或复杂命令行参数。以下是其用法详解:

基本语法

separate_arguments(<variable> [UNIX|WINDOWS_COMMAND] [PROGRAM <program>] [ARGS <args>])
  • <variable>: 存储分割后结果的变量名。
  • 模式选择:
    • UNIX_COMMAND: 按 UNIX Shell 规则分割参数(默认模式),处理空格、引号和转义符。
    • WINDOWS_COMMAND: 按 Windows 命令行规则分割参数。
  • PROGRAMARGS: 指定程序及其参数,自动选择对应平台的分割方式。

使用场景

  1. 处理带空格的路径或参数

    set(ARGS_STRING "src/main.cpp -Iinclude -O2 \"Hello World.cpp\"")
    separate_arguments(SPLIT_ARGS UNIX_COMMAND ${ARGS_STRING})
    message("分割结果: ${SPLIT_ARGS}")
    

    输出:

    分割结果: src/main.cpp;-Iinclude;-O2;Hello World.cpp
    
  2. 从环境变量读取参数

    set(ENV{CFLAGS} "-O2 -Wall -DNAME=\"My Project\"")
    separate_arguments(MY_CFLAGS UNIX_COMMAND $ENV{CFLAGS})
    target_compile_options(myapp PRIVATE ${MY_CFLAGS})
    
  3. 跨平台参数处理

    if(WIN32)
        separate_arguments(ARGS WINDOWS_COMMAND "C:/Program Files/app.exe --flag")
    else()
        separate_arguments(ARGS UNIX_COMMAND "/usr/local/bin/app --flag")
    endif()
    

关键注意事项

  • 引号与转义:
    • UNIX 模式识别双引号 " 和反斜杠转义的空格(如\ )。
    • Windows 模式遵循其命令行解析规则。
  • 分号处理:
    • CMake 列表以分号分隔,分割后的变量可直接用于需要列表的地方(如 target_compile_options)。
  • 默认模式:
    • 若不指定模式,默认使用 UNIX_COMMAND

示例:传递复杂参数

# 定义包含空格的参数
set(ARGS "--input=input.txt" "--output=output file.txt" "-DOPTION=\"A String\"")
separate_arguments(ARGS_LIST UNIX_COMMAND ${ARGS})

# 在自定义命令中使用
add_custom_command(
    OUTPUT result.txt
    COMMAND some_tool ${ARGS_LIST}
    DEPENDS input.txt
)

此例确保 some_tool 正确接收 --input=input.txt--output=output file.txt-DOPTION="A String" 三个参数。


总结

  • 用途:将字符串转换为 CMake 列表,便于处理复杂参数。
  • 模式选择:根据目标平台选择 UNIX_COMMANDWINDOWS_COMMAND
  • 适用场景:处理环境变量、用户输入或跨平台构建时的参数分割。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值