检查字符串是否以CMake中的名称结尾

Jep*_*sen 3 regex cmake

我想检查CMAKE_SOURCE_DIR变量是否以特定名称结尾。我需要使用MATCHES它,但是它似乎不起作用。

我写过:

IF(CMAKE_SOURCE_DIR MATCHES "*MyFolderName")
# code
ENDIF(CMAKE_SOURCE_DIR MATCHES "*MyFolderName")
Run Code Online (Sandbox Code Playgroud)

但这行不通。我收到以下错误:

RegularExpression::compile(): ?+* follows nothing.
RegularExpression::compile(): Error in compile
Run Code Online (Sandbox Code Playgroud)

我想要修理比赛吗?

Tsy*_*rev 8

通常,在正则表达式中,“ *”表示“在零次或多次之前重复”。CMake也不例外。要在字符串末尾进行匹配,请使用$

CMAKE_SOURCE_DIR MATCHES "MyFolderName$"
Run Code Online (Sandbox Code Playgroud)

CMake正则表达式在这里描述。


zau*_*ufi 5

MATCH 需要正则表达式,而不是“文件全局”(通配符)。

if(CMAKE_SOURCE_DIR MATCHES ".*MyFolderName")
   # ...
endif()
Run Code Online (Sandbox Code Playgroud)

甚至试试这个:.*/MyFolderName。但它也会匹配/some/MyFolderName/path....*/MyFolderName$用于匹配最后一个路径名组件。

  • 如果“CMAKE_SOURCE_DIR”包含“+”或正则表达式中使用的任何字符,则此操作不起作用,请参阅:https://developer.blender.org/T65852 (2认同)