我将一些代码移植到Windows和我的cmake检查包使用Libavahi
find_package(Libavahi)
我有标题,DLL等,但我不知道在哪里放置这些cmake会找到它们。
我在哪里可以通过cmake找到这些文件?他们在一个名为的文件夹中 usr
。
我看到使用以下命令指定模块路径:
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
但我想知道是否有一个默认位置也会被搜索
该 CMake手册 完全指定了不同的搜索顺序 find_*
命令。不幸的是,由于Windows缺少默认的目录结构 /usr/local/lib
,这里很难找到合理的默认值。
管理目录最可靠的方法之一是通过环境变量提示。你只需添加一个 $ENV{MY_VAR}
到了 HINTS
find命令的一部分,然后在项目的自述文件中记录该环境变量。大多数能够编译C ++程序的用户都知道如何使用环境变量,并且每次都必须在命令行上提供路径更方便(尽管将其作为附加选项永远不会受到伤害)。
对于 find_package
CMake在Windows上提供了一种称为的特殊机制 包注册表。 CMake在Windows注册表下维护一个包信息列表 HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\
。从源代码构建的包可以使用 export
命令。稍后在同一台机器上构建的其他项目将能够在没有其他配置的情况下找到该包。如果您需要在同一台机器上从源构建大量相互依赖的项目,这非常强大。
更新:从版本3.12开始,立即CMake 隐含地考虑了 <PackageName>_Root
环境变量 HINT
为每一个人 find_package
呼叫。