kmpkg_replace_string
替换文件中的指定字符串(支持普通字符串匹配或正则表达式匹配)。
用法
kmpkg_replace_string(<filename> <match> <replace> [REGEX] [IGNORE_UNCHANGED])
参数说明
<filename>
待修改文件的路径(支持绝对路径或相对路径,相对路径基于当前 CMake 工作目录)。
<match>
需要匹配的字符串:
- 未指定
REGEX时:按字面量匹配字符串; - 指定
REGEX时:按 CMake 正则表达式语法匹配内容。
<replace>
用于替换匹配内容的字符串:
- 普通替换时:直接替换为该字符串字面量;
- 正则替换时:可使用
\1、\2等引用正则表达式中的捕获组(注意 CMake 中需转义为\\1、\\2)。
[REGEX]
可选参数。若指定该参数,<match> 会被视为CMake 风格的正则表达式(而非普通字符串),实现更灵活的匹配替换。
[IGNORE_UNCHANGED]
可选参数。默认情况下,若文件内容未因替换操作发生变化,函数会输出警告;指定该参数后,会禁用此警告。
示例
示例 1:普通字符串替换
替换文件中所有的 old_value 为 new_value,未修改时不告警:
# 替换 ${SOURCE_PATH}/config.h 中的 "VERSION 1.0" 为 "VERSION 2.0"
kmpkg_replace_string(
"${SOURCE_PATH}/config.h"
"VERSION 1.0"
"VERSION 2.0"
IGNORE_UNCHANGED
)
示例 2:正则表达式替换
替换文件中所有以 DEBUG_ 开头的宏定义值为 0:
# 正则匹配 "DEBUG_任意字符=1",替换为 "DEBUG_\\1=0"(\\1 引用捕获组)
kmpkg_replace_string(
"${SOURCE_PATH}/debug.h"
"(DEBUG_\\w+)=1"
"\\1=0"
REGEX
)
注意事项
- 正则语法遵循 CMake 正则表达式规则;
- 替换操作会直接修改原文件,建议在替换前备份重要文件;
- 若文件编码为非 UTF-8(如 GBK),需确保 CMake 能正确识别文件内容(可先通过
file(READ)验证)。