CMakeLists --- 字符串查找替换

发布时间 2023-05-30 19:39:43作者: 林西索

一.字符串的查找和替换

1.查找

string(FIND <string> <substring> <output_variable> <result> [REVERSE])

使用说明:

从给定的string字符串中查找子字符串substring,返回子字符串在string中的位置
如果提供了REVERSE标记,则从string的末尾开始查找
如果没有找到则返回 -1,返回值保存在result中

例子:

#通过编译器名字判断是否编译android
string(FIND "$ENV{CC}" "aarch64-linux-android-gcc" BUILD_ANDROID) if(BUILD_ANDROID EQUAL -1) #message("***Build X86-64***") set(LINK_LIBS -lpthread -lrt) else() message("***Build Android***") set(LINK_LIBS -static-libgcc -static-libstdc++) endif()
说明:
string = "$ENV{CC}":系统环境变量CC的值
substring = "aarch64-linux-android-gcc":需要查找的子字符串
result = BUILD_ANDROID:查找的结果
 
2.替换
string(REPLACE <match_string> <replace_string> <output_variable> <input> [<input>...])

例子:

1.最基本的用法--只有一个input

set(MY_STR /abb/cc/dd/efg/cc/ddb)
string(REPLACE cc xx RESULT ${MY_STR})
message(${RESULT}) # /abb/xx/dd/efg/xx/ddb

说明:

会将匹配的所有子字符串替换

 

2.多个input

set(MY_STR /abb/cc/dd/efg/cc/ddb)
string(REPLACE cc xx RESULT ${MY_STR} --other/cc/bb/ff/dd)
message(${RESULT}) # /abb/xx/dd/efg/xx/ddb--other/xx/bb/ff/dd

说明:

如果有多个input,output是所有input替换后再拼接起来...

如果RESULT有初始值,替换结果只是追加到初始值之后,并不会覆盖原来的值

 

 

参考:https://blog.51cto.com/u_12072082/5637340