CMake: проблема FIND_LIBRARY - PullRequest
       13

CMake: проблема FIND_LIBRARY

4 голосов
/ 11 августа 2011

Моя цель - связать библиотеки /usr/lib/libboinc_api.a и /usr/lib/libboinc.a через CMake. Поэтому я использую примеры, приведенные в разных модулях FIND_XXXX, и пытаюсь:

    FIND_LIBRARY(BOINC_LIBRARY NAMES libboinc_api libboinc
             DOC "The Boinc libraries")
    MESSAGE(${BOINC_LIBRARY})

Но CMake ничего не находит.

Итак, я пытаюсь (с расширениями):

    FIND_LIBRARY(BOINC_LIBRARY NAMES libboinc_api.a libboinc.a
             DOC "The Boinc libraries")
    MESSAGE(${BOINC_LIBRARY})

и сообщение дает мне / usr / lib / libboinc_api.a .

Итак, мои вопросы:

1) Почему я вынужден уточнять расширение (в модулях cmake FIND расширение не уточняется) и как этого избежать?

2) Как связать два файла? (в текущей ситуации в сообщении говорится, что найден только первый, но, может быть, я неправильно понимаю ...)

Большое спасибо.

1 Ответ

8 голосов
/ 11 августа 2011

Здесь есть несколько ошибок: во-первых, аргументы после NAMES будут считаться альтернативными библиотеками для поиска. Поэтому, если он не может найти libboinc_api, он попробует libboinc, прежде чем потерпит неудачу. Поэтому вам лучше запустить FIND_LIBRARY дважды, по одному для каждой библиотеки.

Во-вторых, вам нужно либо указать имя библиотеки так, как оно будет указано в опции компоновщика -l, то есть вместо libboinc_api вам нужно просто сказать boinc_api, либо это полное имя файла, как вы делали во второй попытке.

В случае вашей первоначальной попытки cmake попытается найти liblibboinc_api.so, liblibboinc_api.a, в противном случае liblibboinc.so и, наконец, liblibboinc.a.

Попробуйте это:

FIND_LIBRARY(BOINC_LIBRARY_API NAMES boinc_api
             DOC "The Boinc API library")
FIND_LIBRARY(BOINC_LIBRARY NAMES boinc
             DOC "The Boinc library")

Возможно в обратном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...