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

时间:2014-01-23 17:10:22

标签: cmake

我正在将一些代码移植到Windows上,我的cmake使用

检查包Libavahi
find_package(Libavahi)

我有标题,dll等,但我不知道在哪里放置这些,以便cmake可以找到它们。

我可以在哪里找到cmake找到的这些文件?它们位于名为usr的文件夹中。

我看到模块路径是使用:

指定的
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")

但我想知道是否还会搜索默认位置

1 个答案:

答案 0 :(得分:16)

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

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

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

更新:从版本3.12开始,每隔find_package次调用立即生成implicitly considers the <PackageName>_Root environment variable a HINT