【问题标题】:If statement in Cmake does not work如果 Cmake 中的语句不起作用
【发布时间】:2016-07-07 13:24:52
【问题描述】:

您好,我有以下代码,我希望如果库不存在 cmake 会抛出错误

find_library( lx
          NAMES libx.a
          HINTS "/home/username/HDF_SOURCES/lib")
if(NOT lx)
    message(FATAL_ERROR "libx.a not found")
endif()

我也尝试过 if(lx-NOTFOUND) 但即使库不存在,cmake 也会成功运行。 !! ?

令人困惑的部分是,如果我用 if(lx) 更改循环并且库路径错误,那么它会引发错误。这怎么可能 ?我是不是理解错了?

我在关注this的回答

【问题讨论】:

  • 你确定lx没有被缓存吗?
  • find_library() 确实将其结果存储在缓存变量中。因此,如果它只找到了一次库,它就不会再次运行搜索。在find_library() 调用之前尝试unset(lx CACHE) 来验证这一点。
  • 不,它没有被缓存,我一直在删除文件。
  • 我添加了 NO_DEFAULT_PATH 并且现在可以使用了吗?你知道为什么会这样吗?

标签: cmake


【解决方案1】:

添加 NOT_DEFAULT_PATH 解决了这个问题,现在它的行为完全符合预期

find_library( lx
          NAMES lib.a
          HINTS "/home/username/lib"
          NO_DEFAULT_PATH)

if (NOT lx)
    message(FATAL_ERROR "lib.a not found")
endif()

【讨论】:

  • 有谁知道为什么会这样?
  • 您的库是在默认路径之一中找到的?
  • DEFAULT_PATH 的定义是什么?我搜索了但我找不到一个。除非它尝试搜索我的主文件夹,否则不太可能。
  • 如果在lx 中找到库,则结果。所以就做message("lx = ${lx}")。关于您的问题,this 可能会有所帮助。
  • DEFAULT_PATH 的定义是什么?帮助中有一些信息:cmake --help-command find_package
猜你喜欢
  • 2012-12-26
  • 2013-06-20
  • 2013-09-04
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多