В моем наборе приложений я собираю 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 для WSL), и оказалось, что здесь CMAKE_INSTALL_FULL_LIBDIR устанавливается в ${CMAKE_INSTALL_PREFIX}/lib64. Я проверил документация по CMake, и кажется, что на самом деле выбор «lib» или «lib64» определяется автоматически и зависит от платформы.
Итак, в файле CMakeLists.txt моего собственного приложения есть способ узнать, что это на моей текущей платформе? Как еще я должен догадаться, где искать библиотеку? Я огляделся, но не могу найти стандартную переменную CMAKE, которая содержит строку, зависящую от платформы, поэтому единственное, о чем я могу думать, это:
... но оба они кажутся неуклюже неэлегантными, и наверняка должен быть лучший способ.





Модуль GNUInstallDirs документирует переменную CMAKE_INSTALL_LIBDIR, которая звучит так, как будто она содержит нужное вам значение.
CMAKE_INSTALL_LIBDIR = lib
CMAKE_INSTALL_FULL_LIBDIR = /lib
Кроме того, find_library также должен искать lib и lib64 по мере необходимости в поиске пути по умолчанию, даже при использовании CMAKE_LIBRARY_PATH для определения пользовательского префикса.
Да это оно. Как обычно бывает у меня при чтении документации CMake, это совсем не ясно, если читать ее изолированно; но, получив эту подсказку и просмотрев несколько примеров использования в Интернете, очевидно, что это решение.
"Попробуйте 'lib', а если это не сработает, попробуйте 'lib64', или" - я видел несколько проектов, использующих данный подход.