Makefile cmake字符串以插入符号(^)开头,以美元符号($)结尾?

Makefile cmake字符串以插入符号(^)开头,以美元符号($)结尾?,makefile,cmake,Makefile,Cmake,我看到一个奇怪的cmake行,其中包含一个以“^”开头,以“$”结尾的字符串。但是,它不是正则表达式,而是if语句。是这样的: if ("^${CMAKE_SOURCE_DIR}$" STREQUAL "^${PROJECT_SOURCE_DIR}$") 你能告诉我这是什么意思吗?是否需要添加插入符号和美元符号来比较这两个字符串 首先谢谢。在比较引用值时,我看不出这样的字符串“包装”有什么原因 某些语言(例如bash)在比较可能为空的值时会遇到一些问题,因此在比较的两侧添加一个符号是有意义

我看到一个奇怪的cmake行,其中包含一个以“^”开头,以“$”结尾的字符串。但是,它不是正则表达式,而是if语句。是这样的:

  if ("^${CMAKE_SOURCE_DIR}$" STREQUAL "^${PROJECT_SOURCE_DIR}$")
你能告诉我这是什么意思吗?是否需要添加插入符号和美元符号来比较这两个字符串


首先谢谢。

在比较引用值时,我看不出这样的字符串“包装”有什么原因

某些语言(例如bash)在比较可能为空的值时会遇到一些问题,因此在比较的两侧添加一个符号是有意义的。但同样,若引用这个论点,CMake并没有这样的问题

这是有效的:

if("${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
此外,考虑到给定变量的性质:

  • project()
    调用这两个变量后
  • 变量是非空的
  • 变量包含路径,路径不太可能有
    符号
在大多数情况下,省略引号也是有效的:

if(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
最后,在CMake中比较字符串最自然的方法是:

if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)

在这种情况下,CMake会自动尝试取消引用带有不带引号的名称的变量。

在比较带引号的值时,我看不出这种字符串“换行”的原因

某些语言(例如bash)在比较可能为空的值时会遇到一些问题,因此在比较的两侧添加一个符号是有意义的。但同样,若引用这个论点,CMake并没有这样的问题

这是有效的:

if("${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
此外,考虑到给定变量的性质:

  • project()
    调用这两个变量后
  • 变量是非空的
  • 变量包含路径,路径不太可能有
    符号
在大多数情况下,省略引号也是有效的:

if(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
最后,在CMake中比较字符串最自然的方法是:

if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
在这种情况下,CMake会自动尝试取消引用带有未引号名称的变量