【问题标题】:CMAKE string comparison failsCMAKE 字符串比较失败
【发布时间】:2016-07-05 10:05:42
【问题描述】:

我想在我的 CMakeLists 文件中添加一些库路径,方法是将变量设置为:

set(MYLIBDIR "DEFAULT")

如果用户想指定一个自定义目录,他会将其更改为:

set(MYLIBDIR /path/to/dir1
/path/to/dir2)

所以为了检查用户是否确实提供了额外的目录,我检查:

if(NOT ${MYLIBDIR} STREQUAL "DEFAULT")
 link_directories(${MYLIBDIR})
endif()

当我尝试这样做时,我收到了来自 cmake 的错误。 有没有办法在字符串比较之前连接变量的所有元素?

【问题讨论】:

  • 能否请您也提供您收到的错误消息?你能试试if(NOT MYLIBDIR STREQUAL "DEFAULT")吗?有关详细信息,请参阅 What's the CMake syntax to set and use variables?CMake compare to empty string with STREQUAL failed
  • 错误是:CMake Error at CMakeLists.txt:264 (if): if given arguments: "NOT" " /path/to/dir1" " /path/to/dir2" "STREQUAL" "DEFAULT" Unknown arguments specified
  • 哦,非常感谢。我在您引用的第一个链接中找到了答案。我不得不写if(NOT "${MYLIBDIR}" STREQUAL "DEFAULT")
  • 不客气。然后这是一个引用问题。我在下面的答案中提供了一些细节。我添加了一个指向cmake: when to quote variables? 的链接,在这种情况下,它可能比前两个链接更好地解释了内部工作。

标签: cmake


【解决方案1】:

把我的评论变成答案

连接一个列表可以简单地通过在变量引用周围加上引号来实现:

if(NOT "${MYLIBDIR}" STREQUAL "DEFAULT")

将与

相同
if(NOT "/path/to/dir1;/path/to/dir2" STREQUAL "DEFAULT")

但我会推荐

if(NOT MYLIBDIR STREQUAL "DEFAULT")

更多详情见

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多