我看到一条奇怪的cmake行,其中包含以“^”开头并以“$”结尾的tring。但是,它不是正则表达式,而是if语句。就像这样:
if ("^${CMAKE_SOURCE_DIR}$" STREQUAL "^${PROJECT_SOURCE_DIR}$")
你能说出这意味着什么吗?是否有必要添加插入符号和美元符号来比较两个字符串?
首先感谢。
答案 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会自动尝试使用不带引号的名称取消引用变量。