Как предсказать выбор CMIB LIBDIR для данной платформы - PullRequest
0 голосов
/ 24 апреля 2019

В моем наборе приложений я собираю Libtiff из исходного кода и затем связываю его с приложением, которое я пишу сам.Файлы CMakeLists.txt от Libtiff указывают, что статические библиотеки помещаются в расположение библиотеки CMAKE_INSTALL_FULL_LIBDIR, определяемое опцией CMake GNUInstallDirs.

Когда я впервые собрал и протестировал свое приложение, я сделал это в Debian, и на этой платформе устанавливается CMAKE_INSTALL_FULL_LIBDIRв $ {CMAKE_INSTALL_PREFIX} / lib.Ну и хорошо, поэтому в файле моего собственного приложения CMakeLists.txt я сказал ему искать там статические библиотеки tiff.Нет проблем ...

Теперь я собрал тот же набор сборки для платформы Red Hat Linux (Pengwin Enterprise для WSL), и оказалось, что здесь CMAKE_INSTALL_FULL_LIBDIR получает значение $ {CMAKE_INSTALL_PREFIX} / lib 64 .Я проверил документацию CMake , и кажется, что на самом деле выбор 'lib' или 'lib64' определяется автоматически и зависит от платформы.

Итак, в моемфайл CMakeLists.txt собственного приложения, есть ли способ узнать, что это на моей текущей платформе?Как еще я должен угадать, где искать библиотеку?Я оглянулся, но не могу найти стандартную переменную CMAKE, которая содержит зависящую от платформы строку, поэтому я могу думать только о следующем:

  1. Попробуйте 'lib', и если этоне работает попробуйте 'lib64', или
  2. Создайте новый CMAKE_INSTALL_FULL_LIBDIR в моем собственном файле CMakeLists.txt и прочитайте его конец

... но оба они кажутся неуклюжимии, конечно, должен быть лучший способ.

1 Ответ

0 голосов
/ 24 апреля 2019

GNUInstallDirs модуль документирует переменную CMAKE_INSTALL_LIBDIR, которая звучит так, как будто содержит требуемое значение.

CMAKE_INSTALL_LIBDIR = lib
CMAKE_INSTALL_FULL_LIBDIR = /lib

Также find_library также должен искать lib и lib64 какнеобходим при поиске пути по умолчанию даже при использовании CMAKE_LIBRARY_PATH для определения пользовательского префикса.

...