我需要编写一个CMake FindXYZ类型的模块。在谷歌上,我找到了这个指南:
https://cmake.org/Wiki/CMake:How_To_Find_Libraries
来自Kitware,但有一份关于它被弃用的免责声明。在过去的6-7年里,这些模块的编写方式发生了哪些重大变化?
发布于 2018-02-27 04:28:29
是的,CMake的内容现在正式移到了CMake的文档中,所以“不推荐使用”的警告更多地是一个一般性的警告,即维基不再受到照顾。
在您的案例中,CMake Wiki: How To Find Libraries的主要部分移到了CMake的documentation cmake-packages
章节。
发生了什么变化?
我认为过去几年的主要变化是斯蒂芬·凯利在他的"Embracing Modern CMake"演讲中所说的:
现代CMake包定义了
IMPORTED
目标
Find_package(需要Foo) add_executable(hello main.cpp)核心(hello Foo::target_link_libraries)
在CMake的documentation cmake-developer
- Find Modules章节中可以找到相同的基本色调:
传统方法是将变量用于所有内容,包括库和可执行文件。这就是CMake提供的大多数现有的查找模块所做的事情。
更现代的方法是通过提供导入的目标,尽可能地表现出配置文件包文件的行为。这具有将可传递的使用需求传播给消费者的优点。
详细信息
您可以将这种“现代方法”看作是前面方法的扩展(就像在"FindZLIB: Add imported target and documentation" commit中一样)。
肯定应该有的(多年来所有“查找模块”的核心)是find_package_handle_standard_args()
macro。此宏是围绕..._FOUND
缓存变量处理构建的。
我的建议是专注于导入的目标,而..._INCLUDE_DIRS
和..._LIBRARIES
变量只是必须在某个地方缓存查找结果的副作用。
发布于 2018-02-27 01:15:07
不,我不认为有任何重大的变化。我现在还在用它。
我想他们只是想让你看看他们的其他文档,比如find_package。
在编写新的查找模块时,我通常只是查看其他FindXXX.cmake作为示例/模板,然后从那里开始。
https://stackoverflow.com/questions/48990833
复制相似问题