KitWare在CMake中查找库的指南中不赞成使用了哪些内容?

时间:2018-02-26 14:32:46

标签: cmake cmake-modules

我需要编写一个CMake FindXYZ型模块。谷歌搜索,我发现了这个指南:

https://cmake.org/Wiki/CMake:How_To_Find_Libraries

来自Kitware的

,但有关于它被弃用的免责声明。如果有的话,对这些模块的编写方式(如果有的话)进行了哪些重大改变,比如6-7岁?

1 个答案:

答案 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变量只是必须在某处缓存搜索结果的副作用。