CMake规则正则表达式错误:无法排除绝对路径/lib64
解决CMake中POST_EXCLUDE_REGEXES排除/lib64路径的正则问题
要从运行时依赖列表中仅排除绝对路径/lib64,尝试用正则表达式实现时遇到CMake适配问题:在线校验工具中有效的正则,在CMake里无法正常工作。
使用的代码如下:
install(CODE [[ file(GET_RUNTIME_DEPENDENCIES EXECUTABLES $<TARGET_FILE:myApp1> $<TARGET_FILE:myApp2> $<TARGET_FILE:myApp3> RESOLVED_DEPENDENCIES_VAR RESOLVED_DEPS UNRESOLVED_DEPENDENCIES_VAR UNRESOLVED_DEPS CONFLICTING_DEPENDENCIES_PREFIX CONFLICTING_DEPENDENCIES POST_EXCLUDE_REGEXES "^(\/lib64)$" ) ... ]]
运行时出现警告:
when parsing string
^(/lib64)$Invalid escape sequence /
若将正则改为"^(/lib64)$",则无法成功排除该路径。
解决方案
移除不必要的转义符
在POSIX正则表达式中,/不属于特殊字符,不需要用反斜杠转义。CMake的字符串解析会将\/中的\视为无效转义序列,因此直接使用无转义的正则即可:POST_EXCLUDE_REGEXES "^/lib64$"这个正则会精确匹配整个字符串为
/lib64的依赖项,实现仅排除该绝对路径的需求。适配带末尾斜杠的情况(可选)
如果部分依赖项路径以/lib64/结尾,可调整正则同时匹配两种情况:POST_EXCLUDE_REGEXES "^/lib64/?$"其中
/?表示匹配0个或1个末尾斜杠,覆盖两种路径格式。
内容的提问来源于stack exchange,提问作者Hardwired
相关产品推荐
相关产品推荐

