如何预测 CMake 在给定平台上对 LIBDIR 的选择

How to predict CMake's choice of LIBDIR on a given platform

在我的应用程序套件中,我从源代码构建 Libtiff,然后 link 将其添加到我自己编写的应用程序中。 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 并阅读它的结尾

...但是这两个看起来都笨拙不雅,肯定有更好的方法。

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

CMAKE_INSTALL_LIBDIR = lib
CMAKE_INSTALL_FULL_LIBDIR = /lib

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