为什么使用find_package?

Mad*_*ane 2 cmake

为什么要使用find_package()?

为什么不只是

include_directories(./extlibs/include/)
link_directories(./extlibs/lib/)
Run Code Online (Sandbox Code Playgroud)

然后,您链接到您的程序:

target_link_libraries(${YOURPROJECT} libA libB)
Run Code Online (Sandbox Code Playgroud)

我纳闷,因为我看到不使用find_package的几个原因:

  • 您必须为每个库编写一个新库(没有库)
  • 此Find.cmake返回在Lib_LIBRARY或Lib_LIBRARIES或LIB_LIBRARY,LIB_LIBRARIES中链接的库...对此没有标准吗?->容易出错
  • LIB_INCLUDE可能包含您可能想知道的其他定义(或自定义,例如-DFLOAT_PRECISION)
  • 这要求我的存储库中的新用户有更多知识。

usr*_*567 5

因为我没有文件夹extlib

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

使用find_package可以方便地编写通用的跨平台配置脚本。我什至不知道Windows系统上的标头安装在哪里。但是,当我按照CMake的建议编写它们时,它将正常工作,并且Windows用户确实知道如何告诉您的软件在哪里寻找标头,库以及需要完成的工作。

关于您不使用它的原因:

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