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

时间:2018-05-12 07:31:03

标签: makefile cmake

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

  if ("^${CMAKE_SOURCE_DIR}$" STREQUAL "^${PROJECT_SOURCE_DIR}$")

你能说出这意味着什么吗?是否有必要添加插入符号和美元符号来比较两个字符串?

首先感谢。

1 个答案:

答案 0 :(得分:1)

我认为没有理由在这样的字符串"包装"比较引用的值。

某些语言(例如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会自动尝试使用不带引号的名称取消引用变量。