Я нашел обходной путь для этой проблемы, но я не знаю, почему он работает: я создаю цепочку инструментов 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: я пытался использовать "Пути", а не "Подсказки" "без изменений в результатах (успешные находки все еще работают, а неудачные находят неудачу)