【问题标题】:How does cmake find a package?cmake如何找到一个包?
【发布时间】:2015-08-21 14:15:26
【问题描述】:

我试图了解 cmake 如何使用 FindXXX.cmake 文件查找包。例如,OpenNI 库在此处定义了文件 FindOpenNI.cmakehttps://github.com/PointCloudLibrary/pcl/blob/master/cmake/Modules/FindOpenNI.cmake

现在,在该文件的底部,有以下内容:

if(OPENNI_FOUND)
  # Add the include directories
  set(OPENNI_INCLUDE_DIRS ${OPENNI_INCLUDE_DIR})
  message(STATUS "OpenNI found (include: ${OPENNI_INCLUDE_DIRS}, lib: ${OPENNI_LIBRARY})")
endif(OPENNI_FOUND)

我不明白变量OPENNI_FOUND 的定义位置,因为这是文件中提到它的第一个点。

我原以为这个文件本身是用来查找 OpenNI 的,方法是按照文件内容中的指示搜索目录。但是,似乎OPENNI_FOUND 之前必须声明过。因此,我很困惑:FindOpenNI.cmake 被用于查找 OpenNI,但在此过程中,它被赋予了变量OPENNI_FOUND,它本身告诉 cmake 是否找到了 OpenNI。

那么 cmake 是如何真正找到 OpenNI 的呢?使用这个文件?还是其他方式?

谢谢:)

【问题讨论】:

    标签: c++ linux ubuntu cmake makefile


    【解决方案1】:

    是的,CMake 使用您提到的文件来查找 OpenNI。 OPENNI_FOUND 变量由find_package_handle_standard_args() 函数设置。这是完成所有魔法的地方,请参阅documentation for it

    【讨论】:

    • 啊,好的。那么如果FindOpenNI.cmake文件同时有find_path()find_library(),并且都找到了,那么它会将OPENNI_FOUND设置为true吗?如果没有找到其中一个,那么它会将OPENNI_FOUND 设置为false?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多