【问题标题】:How to predict CMake's choice of LIBDIR on a given platform如何在给定平台上预测 CMake 对 LIBDIR 的选择
【发布时间】:2019-04-23 23:30:40
【问题描述】:

在我的应用程序套件中,我从源代码构建 Libtiff,然后将其链接到我自己编写的应用程序。 Libtiff 的 CMakeLists.txt 文件指定静态库进入库位置 CMAKE_INSTALL_FULL_LIBDIR,由 CMake 的 GNUInstallDirs 选项确定。

当我第一次构建和测试我的应用程序时,我是在 Debian 中进行的,并且在这个平台上 CMAKE_INSTALL_FULL_LIBDIR 被设置为 ${CMAKE_INSTALL_PREFIX}/lib。很好,所以在我自己的应用程序的 CMakeLists.txt 文件中,我告诉它在那里搜索静态 tiff 库。没问题...

现在我已将相同的构建套件用于 Red Hat Linux 平台(Pengwin Enterprise for WSL),结果发现这里的 CMAKE_INSTALL_FULL_LIBDIR 设置为 ${CMAKE_INSTALL_PREFIX}/lib64。我检查了the CMake documentation,似乎说实际上“lib”或“lib64”的选择是自动确定的,并且取决于平台。

那么,在我自己的应用程序的 CMakeLists.txt 文件中,有没有办法找出它在我当前平台上的位置?我应该怎么猜测去哪里寻找图书馆?我环顾四周,但找不到包含平台相关字符串的 CMAKE 标准变量,所以我唯一能想到的是:

  1. 尝试“lib”,如果不起作用,请尝试“lib64”,或者
  2. 在我自己的 CMakeLists.txt 文件中创建一个新的 CMAKE_INSTALL_FULL_LIBDIR 并阅读它的结尾

...但是这两种方法都显得笨拙不雅,肯定有更好的方法。

【问题讨论】:

  • "试试 'lib',如果不起作用,试试 'lib64',或者" - 我见过几个使用给定方法的项目。

标签: cmake libtiff pengwin pengwin-enterprise


【解决方案1】:

GNUInstallDirs 模块记录了 CMAKE_INSTALL_LIBDIR 变量,听起来它包含您想要的值。

CMAKE_INSTALL_LIBDIR = lib
CMAKE_INSTALL_FULL_LIBDIR = /lib

即使使用CMAKE_LIBRARY_PATH 定义自定义前缀,find_library 也应在默认路径搜索中根据需要搜索liblib64

【讨论】:

  • 是的,就是这样。就像我在阅读 CMake 文档时通常的经验一样,孤立地阅读它并不清楚;但是已经给出了这个提示并在互联网上查找了一些使用示例,很明显这就是解决方案。
猜你喜欢
  • 2017-08-03
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 2011-01-02
  • 1970-01-01
  • 2020-02-28
  • 2019-06-17
相关资源
最近更新 更多