LINUX.ORG.RU

CMake + SDL2: почему это работает?

 , , ,


0

1

Дано: Ubuntu 18.04, cmake и SDL2 из реп.

В CMakeLists.txt пишу find_package(SDL2 REQUIRED), при этом никакого вывода в консоль нет, но переменные SDL2_VERSION, SDL2_INCLUDE_DIRS, SDL2_LIBRARIES устанавливаются на корректные значения. Скрипта FindSDL2.cmake нет не только в /usr/share/cmake-3.18/Modules/, но вообще нигде в файловой системе.

Что это за магия? Использует find_package какой-то альтернативный механизм поиска библиотек типа pkg-config при отсутствии подходящего скрипта поиска? Или это что-то другое?

★★★★★

Запусти через strace и посмотри к каким .cmake файлам ходит. Если ни к каким, то значит захардкордили. cmake и так выглядит как куча лапши, так что я не удивлюсь.

ox55ff ★★★★★
()

~ > yay -Ql sdl2 | grep cmake
sdl2 /usr/lib/cmake/
sdl2 /usr/lib/cmake/SDL2/
sdl2 /usr/lib/cmake/SDL2/SDL2Config.cmake
sdl2 /usr/lib/cmake/SDL2/SDL2ConfigVersion.cmake
sdl2 /usr/lib/cmake/SDL2/SDL2Targets-noconfig.cmake
sdl2 /usr/lib/cmake/SDL2/SDL2Targets.cmake
sdl2 /usr/lib/cmake/SDL2/SDL2mainTargets-noconfig.cmake
sdl2 /usr/lib/cmake/SDL2/SDL2mainTargets.cmake

Есть какие-то конфиги, покопай в эту сторону.

vazgen05 ★★★
()
Ответ на: комментарий от vazgen05

Ааа, точно. Помимо скприпта FindSDL2.cmake, он будет ещё искать SDL2Config.cmake и sdl2-config.cmake.

$ dpkg --listfiles libsdl2-dev | grep cmake
/usr/lib/x86_64-linux-gnu/cmake
/usr/lib/x86_64-linux-gnu/cmake/SDL2
/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config-version.cmake
/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake
CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

И если с линуксом всё понятно, с маком можно разобраться, то где искать эти файлы на венде – загадка. Но это уже совсем другая история.

CYB3R ★★★★★
() автор топика

Для понимания работы магии CMake можно запускать его с флагами –trace или –trace-expand. Выведет каждую выполненную строку CMake-кода в том числе «внутреннего».

Лог обычно получается неудобно-большой, но за несколько десятков минут удаётся понять в чём дело. Лучше чем чёрный ящик

GPFault ★★
()
Ответ на: комментарий от GPFault

Спасибо! Полезно, очевидно, но почему-то нигде ничего про это не прочитал до текущего момента.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

К слову, механизм FindXXX - для тех случаев, когда кто-то третий делает обёртку. Механизм XXXConfig*/xxx-config*, когда сам создатель библиотеки предоставляет механизм поиска, наравне с pkg-config скриптами.

Т.е. в первом случае будет больше эвристики и предположений и оно (но это не точно) может быть более переносимым, то во втором случае, поиск таргетирован для системы, на которой собран и установлен пакет, и может содержать вплоть до абсолютных путей к файлам.

Ну и CMake предоставляет средства для полуавтоматической генерации файлов по второму сценарию: CMakePackageConfigHelpers/configure_package_config_file/write_basic_package_version_file

hatred ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.