crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Компиляция Qt плагинов с использованием cmake
igor_bogomolov
  опции профиля:
сообщение 30.9.2010, 9:59
Сообщение #1


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Не получается собрать Qt плагин на cmake. Везде написано, что необходимо добавить следующие определения
ADD_DEFINITIONS(${QT_DEFINITIONS})
ADD_DEFINITIONS(-DQT_PLUGIN)
ADD_DEFINITIONS(-DQT_NO_DEBUG)
ADD_DEFINITIONS(-DQT_SHARED)
ADD_DEFINITIONS(-DQT_DLL)
Добавил, но плагин все равно не собирается, ругается на Q_INTERFACES
Цитата
/home/igor_bogomolov/project/repo/k095-client/src/protocols/k095proto_native_plugin/k095proto_native_plugin.h:13: Error: Undefined interface
make[2]: Leaving directory `/home/igor_bogomolov/project/repo/k095-client/build'
make[1]: Leaving directory `/home/igor_bogomolov/project/repo/k095-client/build'
make[2]: *** [protocols/k095proto_native_plugin/moc_k095proto_native_plugin.cxx] Ошибка 1
make[1]: *** [protocols/k095proto_native_plugin/CMakeFiles/k095proto_native_plugin.dir/all] Ошибка 2
make: *** [all] Ошибка 2

Что я не правильно делаю? Подскажите пожалуйста.
Вот мой CmakeLists.txt
CmakeLists.txt
cmake_minimum_required(VERSION 2.8)

set(PROJECT k095proto_native_plugin)
project(${PROJECT})

if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
    set(PROJECT k095proto_native_plugin_debug)
else()
    add_definitions(-DQT_NO_DEBUG_STREAM)
endif()

list(APPEND HEADERS ${PROJECT_SOURCE_DIR}/../../../../k095-common/zutils.h)
list(APPEND Q_HEADERS ${PROJECT_SOURCE_DIR}/k095proto_native_plugin.h)

list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/../../../../k095-common/zutils.cpp)
list(APPEND Q_SOURCES ${PROJECT_SOURCE_DIR}/k095proto_native_plugin.cpp)

find_package(Qt4 COMPONENTS QtCore QtCore QtNetwork REQUIRED)
include(${QT_USE_FILE})

qt4_wrap_cpp(MOC_SOURCES ${Q_HEADERS})
qt4_automoc(${Q_SOURCES})

add_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)

add_definitions(${QT_DEFINITIONS})
add_definitions(-DQT_PLUGIN)
add_definitions(-DQT_NO_DEBUG)
add_definitions(-DQT_SHARED)
add_definitions(-DQT_DLL)

include_directories(${PROJECT_SOURCE_DIR}/../../../../k095-common)
include_directories(${PROJECT_SOURCE_DIR}/../../kernel)

link_directories(${CMAKE_CURRENT_BYNARY_DIR}/lib)

# output path
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCES_DIR}../../../bin/protocols)

#executable module of tmpled
add_library( ${PROJECT} SHARED ${HEDARS} ${SOURCES} ${Q_HEDARS} ${Q_SOURCES} ${MOC_SOURCES})
target_link_libraries(${PROJECT} ${QT_LIBRARIES} "k095_kernel")

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 30.9.2010, 11:24
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Может быть в add_library вместо SHARED нужно всунуть MODULE ?

Да и в принципе в add_library HEDARS не нужны.

--

Хотя... врядли MODULE нужно...

И еще, может быть убрать
Цитата
ADD_DEFINITIONS(-DQT_DLL)
и оставить
Цитата
ADD_DEFINITIONS(-DQT_SHARED)
?

А с qmake плагин собирается?

Сообщение отредактировал kuzulis - 30.9.2010, 11:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 30.9.2010, 11:45
Сообщение #3


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Да, с qmake собирается нормально. Я как раз с qmake на cmake перевожу проект.
С дефайнами я по разному игрался, не помогает.

Вообще какая то странная проблема. Ошибку мне выдает метокомпилятор
Цитата
/home/igor_bogomolov/project/repo/k095-client/src/protocols/k095proto_native_plugin/k095proto_native_plugin.h:13: Error: Undefined interface
make[2]: *** [protocols/k095proto_native_plugin/moc_k095proto_native_plugin.cxx] Ошибка 1
Ругается на
Q_INTERFACES(IProtocol)
Файл moc_k095proto_native_plugin.cxx при этом не создается. Что ему может не хватать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 30.9.2010, 12:05
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


похожие проблемы
1
2
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 30.9.2010, 12:29
Сообщение #5


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


kwisp, kuzulis - спасибо, проблему решил методом научного тыка. :)

Команды qt4_wrap_cpp и qt4_automoc должны быть после add_definitions и include_directories. Почему, не знаю :unknown:
Т.е. вот так вот всё работает
Раскрывающийся текст
cmake_minimum_required(VERSION 2.8)

set(PROJECT k095proto_native_plugin)
project(${PROJECT})

if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
    set(PROJECT k095proto_native_plugin_debug)
else()
    add_definitions(-DQT_NO_DEBUG_STREAM)
endif()

list(APPEND HEADERS ${PROJECT_SOURCE_DIR}/../../../../k095-common/zutils.h)
list(APPEND Q_HEADERS ${PROJECT_SOURCE_DIR}/k095proto_native_plugin.h)

list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/../../../../k095-common/zutils.cpp)
list(APPEND Q_SOURCES ${PROJECT_SOURCE_DIR}/k095proto_native_plugin.cpp)

find_package(Qt4 COMPONENTS QtCore QtCore QtNetwork REQUIRED)
include(${QT_USE_FILE})

add_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)

add_definitions(${QT_DEFINITIONS})
add_definitions(-DQT_PLUGIN)
add_definitions(-DQT_NO_DEBUG)
add_definitions(-DQT_SHARED)
add_definitions(-DQT_DLL)

include_directories(${PROJECT_SOURCE_DIR}/../../../../k095-common)
include_directories(${PROJECT_SOURCE_DIR}/../../kernel)

qt4_wrap_cpp(MOC_SOURCES ${Q_HEADERS})
qt4_automoc(${Q_SOURCES})

link_directories(${CMAKE_CURRENT_BYNARY_DIR}/lib)

# output path
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCES_DIR}../../../bin/protocols)

#executable module of tmpled
add_library( ${PROJECT} SHARED ${HEDARS} ${SOURCES} ${Q_HEDARS} ${Q_SOURCES} ${MOC_SOURCES})
target_link_libraries(${PROJECT} ${QT_LIBRARIES} "k095_kernel")

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 8.10.2010, 22:44
Сообщение #6


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


А как сделать что бы к получаемой so/dll не добавлялся префикс lib?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 3:25