我需要编写一个CMake FindXYZ型模块。谷歌搜索,我发现了这个指南:
https://cmake.org/Wiki/CMake:How_To_Find_Libraries
来自Kitware的,但有关于它被弃用的免责声明。如果有的话,对这些模块的编写方式(如果有的话)进行了哪些重大改变,比如6-7岁?
答案 0 :(得分:3)
是的,CMake Wiki的内容现已正式移到CMake的文档中,所以"弃用"警告更像是维基不再受到关注的一般警告。
在您的情况下,CMake Wiki: How To Find Libraries的主要部分移至了CMake的文档cmake-packages
章节。
发生了什么变化?
我认为过去几年的主要变化是斯蒂芬凯利在他的"Embracing Modern CMake"演讲中所说的:
现代CMake包定义
IMPORTED
目标find_package(Foo REQUIRED) add_executable(hello main.cpp) target_link_libraries(hello Foo::Core )
在CMake的文档cmake-developer
- Find Modules章节中可以找到相同的基本色调:
传统方法是将变量用于所有内容,包括库和可执行文件。这就是CMake提供的大多数现有查找模块。
更现代的方法是通过提供导入的目标,尽可能像配置文件包文件一样运行。这具有将传递使用要求传播给消费者的优势。
<强>详情
你可以看到这种&#34;现代方法&#34;作为以前方法的扩展(如"FindZLIB: Add imported target and documentation" commit)。
肯定会有什么(所有&#34;查找模块的核心&#34;现在多年)是find_package_handle_standard_args()
macro。
此宏是围绕..._FOUND
缓存变量处理构建的。
我的建议是专注于导入的目标,而..._INCLUDE_DIRS
和..._LIBRARIES
变量只是必须在某处缓存搜索结果的副作用。