при сборке с использованием приведенного ниже сценария CMake проект строится без ошибок.
cmake_minimum_required(VERSION 3.0.0)
project(asdqwdw VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS
Core
REQUIRED)
add_executable(${PROJECT_NAME} main.cpp serv.h serv.cpp)
target_link_libraries(${PROJECT_NAME} Qt5::Core)
, но когда я использую следующий сценарий CMake,
cmake_minimum_required(VERSION 3.0.0)
project(asdqwdw VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS
Core
REQUIRED)
add_library(SERV serv.h serv.cpp)
target_link_libraries(SERV Qt5::Core)
add_executable(${PROJECT_NAME} main.cpp ${SERV})
target_link_libraries(${PROJECT_NAME} Qt5::Core)
я получаю эту ошибку,
CMakeFiles/asdqwdw.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x45): undefined reference to `serv::serv(QObject*)'
CMakeFiles/asdqwdw.dir/main.cpp.o: In function `serv::~serv()':
main.cpp:(.text._ZN4servD2Ev[_ZN4servD5Ev]+0xf): undefined reference
to `vtable for serv'
collect2: error: ld returned 1 exit status
make[2]: *** [asdqwdw] Error 1
make[1]: *** [CMakeFiles/asdqwdw.dir/all] Error 2
make: *** [all] Error 2
есть ли объяснение, почему я не могу использовать последний скрипт CMake вместо первого?
файлы не помещаются вподкаталоги и они следующие:
main.cpp
#include <QCoreApplication>
#include "serv.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
serv dat;
return a.exec();
}
serv.h
#ifndef SERV_H
#define SERV_H
#include <QObject>
class serv : public QObject
{
Q_OBJECT
public:
explicit serv(QObject *parent = nullptr);
signals:
public slots:
};
#endif // SERV_H
serv.cpp
#include "serv.h"
serv::serv(QObject *parent) :
QObject(parent)
{
}