0

Возникла такая ситуация: есть проект CMake, в корне папки находится главный CMakeLists, который включает директории (subdirs) и там уже находятся свои подпроекты (статические библиотеки, dll's), где и находятся исходные файлы

cmake_minimum_required(VERSION 3.1.0)

project(APP)

set(CMAKE_AUTOMOC   ON)
set(CMAKE_AUTOUIC   ON)

set(CMAKE_PREFIX_PATH   "C:\\Qt64\\5.12.1\\mingw73_64")
find_package(Qt5Widgets Qt5Core REQUIRED)
include_directories(includes gui winapi dll appapi app)

subdirs(
  winapi
  gui
  appapi
  app
        dll

)

Есть папка gui, которая содержит в себе определение главного окна Qt (MainWindow), это собирается без проблем Также есть папка winapi, которая хранит заголовочный файл с классом, производным от QObject и имеющим макрос Q_OBJECT

class Process : public QProcess{
    Q_OBJECT
    //...
    public:
    virtual ~Process(){};
}

И CMakeLists это папки:

project(WINAPI)

set(SRC_winapi process.cpp)

set(LIBS Dbghelp Psapi)

add_library(${PROJECT_NAME} STATIC ${SRC_winapi})
target_link_libraries(${PROJECT_NAME} ${LIBS})
qt5_use_modules(${PROJECT_NAME} Widgets)

Проблема в том, что подпроект GUI собирается, а WINAPI - завершается на ошибке Undefined refernce to vtable Process Подскажите пожалуйста, в чем может быть дело

sddvxd
  • 83
  • не разбираюсь в этом полудокументированном cmake, но похоже, что process.h не компилится moc-ом, или moc_Process.cpp не участвует в сборке – Pavel Gridin Feb 05 '19 at 17:30
  • @PavelGridin действительно, заработало... зачем мне указывать CMake этот заголовочный файл, если я подключаю его в cpp файле process.cpp? – sddvxd Feb 05 '19 at 17:41
  • для qmake файлы, в которых есть Q_OBJECT обязательно должны быть в списке HEADERS, чтобы откомпились moc, cpp-файлы на этот предмет никто не анализирует – Pavel Gridin Feb 05 '19 at 17:49
  • @PavelGridin точно, MOC компилятор обрабатывает же только .h файлы. спасибо – sddvxd Feb 05 '19 at 17:51

0 Answers0