为什么要使用find_package?

时间:2016-08-26 17:09:19

标签: cmake

为什么要使用find_package()?

为什么不

include_directories(./extlibs/include/)
link_directories(./extlibs/lib/)

然后你链接到你的程序:

target_link_libraries(${YOURPROJECT} libA libB)

我想知道,因为我发现有几个理由不使用find_package:

  • 你必须为每个库(没有它)写一个新的
  • 此Find.cmake返回库在Lib_LIBRARY中链接的位置,或 Lib_LIBRARIES,或LIB_LIBRARY,LIB_LIBRARIES ......没有标准吗? - >容易出错
  • LIB_INCLUDE可能包含您可能想要了解的其他定义(或自定义,例如-DFLOAT_PRECISION)
  • 这需要为我的存储库中的新用户提供额外的知识。

1 个答案:

答案 0 :(得分:4)

因为我没有文件夹extlib

好的,严重的是,您计算机上的设置只能从您的计算机进行设置。如果您只想为您的设置或有限数量的系统进行开发,您可以相应地进行配置,您不需要CMake及其find_package机制。您也可以使用普通的Makefile或键入编译命令到您的终端并使用bash历史记录。

find_package可以编写一般的跨平台配置脚本。我甚至不知道在Windows系统上安装标头的位置。但是当我按照CMake建议的方式编写它们时,它就会起作用,而Windows用户确实知道如何告诉你的软件在哪里寻找标题,库以及需要做的事情。

关于你的理由不使用它:

  • 这个想法是,越来越多的库提供FindMyLib.cmake文件或更好的MyLib-config.cmake文件。至少对于C ++,提供这些文件的库的数量正在增长。
  • 许多基本库非常简单,您可以在十几个CMake行中找到它们的标题和库。
  • 有一些约定应该如何命名变量,但是它们没有被强制执行,并且仍然存在许多错误的遗留代码。
  • 软件的作者写了一次他的代码,然后所有用户都可以从中受益。这对作者来说可能不方便,但如果它起作用,你几乎不必再触摸它。