Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компиляция Qt плагинов с использованием cmake
Форум на CrossPlatform.RU > Разработка > Инструменты разработчика
igor_bogomolov
Не получается собрать 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
Может быть в add_library вместо SHARED нужно всунуть MODULE ?

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

--

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

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

А с qmake плагин собирается?
igor_bogomolov
Да, с 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
похожие проблемы
1
2
igor_bogomolov
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
А как сделать что бы к получаемой so/dll не добавлялся префикс lib?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.