CMake Найти проблемы с библиотекой, если "lib" является каталогом в пути - PullRequest
1 голос
/ 24 марта 2020

Я нашел обходной путь для этой проблемы, но я не знаю, почему он работает: я создаю цепочку инструментов CMake для платформы со многими библиотеками, предоставляемыми КОМПАНИЕЙ в нескольких местах.

Примечание: SDK_PATH передается как переменная окружения.

Например, предоставленная библиотека C ++ находится в ${SDK_PATH}/COMPANY/stl/libc++-COMPANY/lib/libc++.so, а другая библиотека находится в ${SDK_PATH}/lib/COMPANY/libCOMPANY_ext_logging.so

Для библиотеки C ++ я могу найти его, как и ожидалось, с помощью:

find_library(CPP
    NAMES
    c++
    HINTS
    ${SDK_PATH}/COMPANY/stl/libc++-COMPANY/lib
    NO_DEFAULT_PATH
    )

Однако я не могу найти библиотеку журналов с:

find_library(LOGGING
    NAMES
    COMPANY_ext_logging
    HINTS
    ${SDK_PATH}/lib/COMPANY
    NO_DEFAULT_PATH
    )

Однако я обнаружил, что если я копирую библиотеки проблемных c в следующем подкаталоге "lib" все работает (я думаю, это ключевое слово, которое CMake каким-то образом ищет) IE, если я скопирую библиотеку для ведения журнала в ${SDK_PATH}/lib/COMPANY/lib/libCOMPANY_ext_logging.so и изменим команду поиска на:

find_library(LOGGING
    NAMES
    COMPANY_ext_logging
    HINTS
    ${SDK_PATH}/lib/COMPANY/lib
    NO_DEFAULT_PATH
    )

тогда все работает нормально. Что для меня мало смысла.

Я полагаю, что это работало без обходного пути около года go, но я не уверен (я столкнулся с этим при обновлении как моего CMake, так и версии библиотек компании )

Есть ли лучший синтаксис CMake, который я мог бы использовать, чтобы избежать необходимости обходного пути и все еще находить библиотеки по пути ${SDK_PATH}/lib/COMPANY?

Примечание2: я пытался использовать "Пути", а не "Подсказки" "без изменений в результатах (успешные находки все еще работают, а неудачные находят неудачу)

...