使用cmake的windows中find_package的默认搜索路径是什么?

JuJ*_*oDi 17 cmake

我将一些代码移植到Windows和我的cmake检查包使用Libavahi

find_package(Libavahi)
Run Code Online (Sandbox Code Playgroud)

我有标题,DLL等,但我不知道在哪里放置这些cmake会找到它们.

我在哪里可以通过cmake找到这些文件?他们在一个名为的文件夹中usr.

我看到使用以下命令指定模块路径:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个默认位置也会被搜索

Com*_*sMS 19

CMake的手动完全指定了不同的相当复杂的搜索顺序find_*命令.不幸的是,由于Windows缺少默认的目录结构/usr/local/lib,因此很难在这里找到合理的默认值.

管理目录最可靠的方法之一是通过环境变量提示.您只需在find命令$ENV{MY_VAR}HINTS一部分中添加一个,然后在项目的自述文件中记录该环境变量.大多数能够编译C++程序的用户都知道如何使用环境变量,并且每次都必须在命令行上提供路径更方便(尽管将其作为附加选项永远不会受到伤害).

对于find_packageCMake,在Windows上提供了一种称为包注册表的特殊机制.CMake在Windows注册表下维护一个包信息列表HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\.从源代码构建的包可以使用该export命令在那里注册.稍后在同一台机器上构建的其他项目将能够在没有其他配置的情况下找到该包.如果您需要在同一台机器上从源构建许多相互依赖的项目,这非常强大.

更新:从版本3.12开始,CMake现在隐式考虑<PackageName>_RootHINT每个find_package调用环境变量a.

  • 万一有人像我这样的cmake语法...这是一个示例行(请注意,OpenCV是我的包,我在环境变量中创建了OPENCV_DIR,它指向我系统上的open cv build目录(来自源代码) ):find_package(OpenCV REQUIRED HINTS $ ENV {OPENCV_DIR}) (6认同)