Cmake: сборка библиотек

IDE, VCS и прочее

Модератор: Модераторы разделов

IMB
Сообщения: 2567
ОС: Debian

Cmake: сборка библиотек

Сообщение IMB »

Знатоки Cmake, может подскажите - я хочу собрать библиотеку для динамической и статической линковки, сейчас работаю с http://qt-apps.org/content/show.php?content=133649
Итак, в основной CmakeList.txt добавил SET(VLCQT_STATIC ${PROJECT_NAME}). В CmakeList.txt для сборки добавил:

Код: Выделить всё

.............
ADD_LIBRARY(${VLCQT_STATIC} STATIC ${VLCQT_SRCS} ${VLCQT_MOCS_SRCS})
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    .....................................
        SET_TARGET_PROPERTIES(${VLCQT_STATIC} PROPERTIES VERSION ${VLCQT_VERSION}
                                          SOVERSION "${VLCQT_VERSION_MAJOR}.${VLCQT_VERSION_MINOR}")

ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")

При сборке получаю сообщение:

Код: Выделить всё

CMake Error at src/CMakeLists.txt:86 (ADD_LIBRARY):
  add_library cannot create target "vlc-qt" because another target with the
  same name already exists.  The existing target is a shared library created
  in source directory "/home/user/vlc-qt/src".  See
  documentation for policy CMP0002 for more details.

Спасибо.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Cmake: сборка библиотек

Сообщение eddy »

Вы имя цели другое сделайте-то. А то у вас, похоже, и динамическая, и статическая библиотеки называются "vlc-qt".
Например:

Код: Выделить всё

set(VLCQT_STATIC ${PROJECT_NAME}_static)
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Cmake: сборка библиотек

Сообщение IMB »

Но это как-то странно, на мой взгляд. Мне надо получить две библиотеки libvlc-qt.so и libvlc-qt.a, и тогда в проекте я смогу использовать необходимую мне.
В предложенным Вами варианте надо будет дополнительно отслеживать как я линкую и править имя библиотеки.
Да и после Make это выглядит не привычно, но если нет другого выхода...
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Cmake: сборка библиотек

Сообщение eddy »

В общем, не знаю, чего вы там натворили, попробовал я со своей CGI-библиотечкой (т.к. больше ничего "библиотечного" под рукой не оказалось). Сделать 2 библиотеки (стат. и динам.) просто:

Код: Выделить всё

add_library(${AUTHLIB} SHARED STATIC ${LIBSRCS})

т.е. пишем и SHARED, и STATIC.
Ну, а чтобы cmake не ругался на отсутствие путей для цели install, добавляем ARCHIVE DESTINATION:

Код: Выделить всё

install(TARGETS ${AUTHLIB} LIBRARY
        DESTINATION "lib"
        ARCHIVE DESTINATION "lib"
        )

В результате cmake не ругается, компилируются и статическая, и динамическая библиотечки.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Cmake: сборка библиотек

Сообщение IMB »

Значит мне не везёт.

Код: Выделить всё

--- a/src/CMakeLists.txt.org    2011-07-08 14:51:25.000000000 +0400
+++ b/src/CMakeLists.txt    2011-07-08 14:51:51.000000000 +0400
@@ -82,7 +82,7 @@
 INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/src/core" "${CMAKE_SOURCE_DIR}/src/gui" ${LIBVLC_INCLUDE_DIR})

 # Create the library.
-ADD_LIBRARY(${VLCQT_SHARED} SHARED ${VLCQT_SRCS} ${VLCQT_MOCS_SRCS})
+ADD_LIBRARY(${VLCQT_SHARED} SHARED STATIC ${VLCQT_SRCS} ${VLCQT_MOCS_SRCS})

 IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
     SET_TARGET_PROPERTIES(${VLCQT_SHARED} PROPERTIES VERSION ${VLCQT_VERSION}

Собирается только статическая библиотека, использую cmake version 2.8.2.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Cmake: сборка библиотек

Сообщение eddy »

У меня 2.8.1, так что, скорее всего, у вас где-то еще что-то не так. Вы бы на какой-нибудь pastebin выложили весь CMakeLists.txt.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Cmake: сборка библиотек

Сообщение IMB »

Пожалуйста, http://pastebin.com/QbFY9tx2
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Cmake: сборка библиотек

Сообщение eddy »

IMB писал(а):
08.07.2011 15:33
Пожалуйста, http://pastebin.com/QbFY9tx2

А зачем вам вот это:

Код: Выделить всё

TARGET_LINK_LIBRARIES(${VLCQT_SHARED} ${QT_LIBRARIES} ${LIBVLC_LIBRARY} ${LIBVLCCORE_LIBRARY})

при сборке библиотеки?

А вообще, ничего, мешающего собрать статическую и динамическую библиотеки разом, не вижу. Вот на всякий случай мой CMakeLists.txt (да, это старый файл, там install не работает, новый у меня дома, а туда я вход извне урезал, чтобы не ломали).
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Cmake: сборка библиотек

Сообщение IMB »

Это не мой файл, я использую готовую библиотеку.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Cmake: сборка библиотек

Сообщение eddy »

Тогда зачем вам править ее CMakeLists? Просто проверяйте у себя, установлена ли та библиотека.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Cmake: сборка библиотек

Сообщение IMB »

Эта библиотека у меня не установлена, поэтому я её собираю из исходников. Почему у меня появилось желание собрать её для статической линковки? Что бы коллегам с Windows проще было собрать программу с минимальным количеством внешних зависимостей.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Cmake: сборка библиотек

Сообщение eddy »

IMB писал(а):
08.07.2011 16:16
Эта библиотека у меня не установлена, поэтому я её собираю из исходников. Почему у меня появилось желание собрать её для статической линковки? Что бы коллегам с Windows проще было собрать программу с минимальным количеством внешних зависимостей.

А вы уверены, что эта библиотечка будет в мастдае собираться? v4l-обработчики для него разве есть?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Cmake: сборка библиотек

Сообщение IMB »

eddy писал(а):
08.07.2011 16:18
А вы уверены, что эта библиотечка будет в мастдае собираться? v4l-обработчики для него разве есть?

А причём здесь v4l? Эта библиотека является обёрткой для Qt для вызова libvlc.
Спасибо сказали: