在Windows中使用cmake时,find_package的默认搜索路径是什么?

mqxuamgl  于 2022-11-24  发布在  Windows
关注(0)|答案(2)|浏览(349)

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

find_package(Libavahi)

我有标头、dll等,但我不确定在哪里放置这些,这样cmake就可以找到它们。
我可以将这些文件放在哪里以供cmake查找?它们位于名为usr的文件夹中。
我看到模块路径是使用以下命令指定的:

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

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

9rnv2umw

9rnv2umw1#

CMake manual完全指定了不同find_*命令的复杂搜索顺序。不幸的是,由于Windows缺少/usr/local/lib那样的默认目录结构,很难在这里找到合理的默认值。
管理目录最可靠的方法之一是通过环境变量提示。您只需在find命令的HINTS部分添加一个$ENV{MY_VAR},然后在项目的自述文件中记录该环境变量。大多数能够编译C++程序的用户都知道如何使用环境变量,而且它比每次都必须在命令行上给予路径要方便得多(尽管将其作为一个附加选项并没有什么坏处)。
对于find_package,CMake在Windows上提供了一个特殊的机制,称为包注册表。CMake在Windows注册表的HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\下维护一个包信息列表。从源代码构建的包可以使用export命令在那里注册。随后在同一台机器上构建的其他项目将能够找到该包,而无需额外的配置。如果您需要在同一台机器上从源代码构建许多相互依赖的项目,这是非常强大的。
更新:从版本3.12开始,CMake现在对每个find_package调用都是implicitly considers the <PackageName>_Root environment variable a HINT

7lrncoxx

7lrncoxx2#

在较新版本的cmake中,您可以使用--debug-find选项列出cmake正在搜索的目录。例如:

cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TOOLS=ON --debug-find .

相关问题