gpt4 book ai didi

cmake - 为什么使用find_package?

转载 作者:行者123 更新时间:2023-12-02 09:24:15 26 4
gpt4 key购买 nike

为什么使用 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)
  • 这需要新用户了解我的存储库的更多知识。

最佳答案

因为我没有文件夹extlib!

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

find_package 可以方便地编写通用的跨平台配置脚本。我什至不知道 Windows 系统上 header 安装在哪里。但是,当我按照 CMake 建议的方式编写它们时,它就会正常工作,并且 Windows 用户确实知道如何告诉您的软件在哪里查找 header 、库以及需要执行的任何操作。

关于您不使用它的原因:

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

关于cmake - 为什么使用find_package?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39171452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com