CMake AUTOMOC с файлами в разных папкахC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 CMake AUTOMOC с файлами в разных папках

Сообщение Anonymous »

У меня есть простой проект CMake:

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

proj (project folder)
├── a.h
├── a.cpp
└── CMakeLists.txt
CMakeLists.txt:

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

cmake_minimum_required(VERSION 3.2)

set(CMAKE_VERBOSE_MAKEFILE ON)

set(CMAKE_AUTOMOC ON)

project(proj)

set( proj_SOURCE
a.cpp
)

find_package(Qt5Core)

set( proj_LIBRARIES
Qt5::Core
)

add_library(proj SHARED ${proj_SOURCE})
target_link_libraries(proj ${proj_LIBRARIES})
аа:

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

#pragma once

#include 

class A : public QObject
{
Q_OBJECT
public:
explicit A(QObject *parent = 0);
};
a.cpp:

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

#include "a.h"

A::A(QObject *parent) : QObject(parent)
{
}
и все отлично компилируется. Затем я попытался переместить файл заголовка и исходный файл в другую папку следующим образом:

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

proj (project folder)
├── include
│   └── a.h
├── src
│   └── a.cpp
└── CMakeLists.txt
И попробовал разные конфигурации следующих вызовов:

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

include_directories("include")
include_directories("src")

set( proj_SOURCE
src/a.cpp
)
Неважно, что я делаю, компиляция не удалась с вариациями

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

a.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl A::metaObject(void)const
" (?metaObject@A@@UEBAPEBUQMetaObject@@XZ) [C:\Users\me\AppData\Local\Temp\subclass\build\proj.vcxproj]
a.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl A::qt_metacast(char const *)" (?qt_metacast@A
@@UEAAPEAXPEBD@Z) [C:\Users\me\AppData\Local\Temp\subclass\build\proj.vcxproj]
a.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl A::qt_metacall(enum QMetaObject::Call,int,void *
*)" (?qt_metacall@A@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) [C:\Users\me\AppData\Local\Temp\subclass\build\proj.vcxproj]
C:\Users\me\AppData\Local\Temp\subclass\build\Debug\proj.exe : fatal error LNK1120: 3 unresolved externals [C:\Users\me\Ap
pData\Local\Temp\subclass\build\proj.vcxproj]
Я не знаю, нужно ли мне устанавливать что-то дополнительное для работы CMake или в чем проблема. В этом ответе говорится, что CMake плохо работает в этой конфигурации (файлы в разных папках), но, возможно, есть способ?

Подробнее здесь: https://stackoverflow.com/questions/371 ... nt-folders
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»