我正在将一些代码移植到Windows上,我的cmake使用
find_package(Libavahi)
我有标头、dll等,但我不确定在哪里放置这些,这样cmake就可以找到它们。我可以将这些文件放在哪里以供cmake查找?它们位于名为usr的文件夹中。我看到模块路径是使用以下命令指定的:
usr
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
但我想知道是否也会搜索默认位置
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。
find_*
/usr/local/lib
HINTS
$ENV{MY_VAR}
find_package
HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\
export
<PackageName>_Root
HINT
7lrncoxx2#
在较新版本的cmake中,您可以使用--debug-find选项列出cmake正在搜索的目录。例如:
--debug-find
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TOOLS=ON --debug-find .
2条答案
按热度按时间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 aHINT
。7lrncoxx2#
在较新版本的cmake中,您可以使用
--debug-find
选项列出cmake正在搜索的目录。例如: