CMake в проекте с инклюдами уровнем выше (Под убунтой работает, под оффтопиком — нет)

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

Аватара пользователя
Maaaks
Сообщения: 107
ОС: Kubuntu

CMake в проекте с инклюдами уровнем выше

Сообщение Maaaks »

Пишу приложеньице на Qt, которое должно уметь подключать модули с помощью системы плагинов Qt. Собираю его с помощью CMake, причём каждый каждый подключаемый модуль хочу сделать отдельным CMake-проектом, который будет собираться в файл ИмяМодуля.so (под виндой — ИмяМодуля.dll) и подключаться в рантайме. Под линуксом (Kubuntu 11.10) всё замечательно собирается и работает, а вот под виндой проект модуля не собирается. Из чего делаю предположение, что у меня что-то принципиально не так, как нужно, и под линуксом всё собирается чисто случайно. Вот и прошу совета.

Файл CMakeLists.txt в директории модуля:

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

project(FirstModule)
cmake_minimum_required(VERSION 2.6)
find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
include(${QT_USE_FILE})
include_directories(${QT_INCLUDES})

# Мы будем собирать отдельный файл Qt-плагина
add_definitions(-DQT_PLUGIN)
add_definitions(-DQT_SHARED)
set(CMAKE_SHARED_LIBRARY_PREFIX "")

# Отключить лишний вывод в консоль
set(CMAKE_VERBOSE_MAKEFILE 0)

# Включить отладку
set(CMAKE_BUILD_TYPE Debug)

# Помимо стандартных папок, подключим папку с исходниками основного приложения
include_directories("../../" ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})

# Возьмём наши исходники и заголовки
set(CPP "firstmodule.cpp")
set(H "firstmodule.h")

# Подключим исходники и формы приложения
file(GLOB_RECURSE CORE_H "core/*.h")
file(GLOB_RECURSE UI "*.ui" "../../core/*.ui")

# Обработаем все заголовки и формы утилитами Qt
qt4_wrap_cpp(MOC ${H} ${CORE_H} OPTIONS -nw)
qt4_wrap_ui(UI ${UI})

# В конечном счёте линкуем исходные H и CPP, а также выхлопы MOC и UI
add_library(FirstModule SHARED ${CPP} ${H} ${CORE_H} ${UI} ${MOC})


Возможно, нюанс в том, что папка с проектом модуля находится внутри папки с проектом основного приложения. Вот тут, например, пишут, что указание родительских путей может вызывать некоторые проблемы. Пробовал сделать как пишут там (через get_filename_component) — ноль эффекта. Ошибки то при линковке, то ещё при компиляции.

Кто-нибудь может направить на путь истинный, а то я сейчас абсолютно не на том и, видимо, где-то использую CMake так, как его использовать нельзя.
Спасибо сказали: