У меня есть простой проект CMake:CMake AUTOMOC с файлами на разных папках
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 <QObject>
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
)
dosen't от того, что я делаю компиляция завершается с вариациями
a.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl A::metaObject(void)const
" ([email protected]@@[email protected]@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 *)" ([email protected]
@@[email protected]) [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 *
*)" ([email protected]@@[email protected]@@[email protected]) [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 работать или то, что проблема есть. This ответ говорит, что CMake не работает хорошо в этой конфигурации (файлы в разных папках), но, может быть, есть способ?
Спасибо! Это единственное решение, которое, похоже, работает на меня! Это просто, и я не вижу недостатка в этом ... также, переменная 'HEADERS'' qmake' читается так, как если бы она помещала эти файлы заголовков в проект, что еще больше подсказывает ваш путь – IceFire