2016-02-25 55 views
1

我正在嘗試使我的其他Qt項目可以使用的共享庫。在圖書館裏我有一個類,類似於此:Cmake庫與Qt對象?

A.h 

class A : public QWidget 
{ 
    Q_OBJECT 
public: 
    A(QWidget *parent = 0); 
    ~A(); 

protected: 
    void overriddenQtFunc() Q_DECL_OVERRIDE; // Overriding a QtWidget function. 

    // other variables and functions here... 

} 

A.cpp 
A::A(QWidget *parent):QWidget(parent){} 
A::~A(){} 
void A::overriddenQtFunc(){ // Custom implementation here... } 
// Other function implementations. 

看起來我對圖書館的CMake如下:

cmake_minimum_required(VERSION 3.0.2) 
set(LIB_NAME "TestLib") 

find_package(QT5Widgets) 

include_directories("includes") # Where my A.h file lives along with 
           # my other custom library code. 

set(SRCS # Source list here) 
set(HDRS # Header list here) 

add_library(${LIB_NAME} ${SRCS} ${HDRS}) 

target_include_directories(${LIB_NAME} PRIVATE ${Qt5Widgets_INCLUDE_DIRS}) 
target_include_directories(${LIB_NAME} PUBLIC "includes") 

一切編譯和工作正常,當我把「Q_OBJECT」出來的類與我的重寫方法。否則,當我想和他們一起編譯,我得到

LNK2001: unresolved external symbol "protected: virtual void __thiscall A::overriddenQtFunc(void)" 

有沒有別的東西,我需要做的就是它正確鏈接?它是否與我的來源不被「moc」編輯有關?

+0

在'A.cpp'你:'無效overriddenQtFunc(){'難道不應該是:'無效A :: overriddenQtFunc(){'這樣你就不會定義免費功能與A類無關?或者你的例子錯了? – drescherjm

+0

你是@drescherjm。編輯。 – MrJman006

回答

0

試試這個

set(CMAKE_AUTOMOC ON) 
+0

剛剛嘗試過,我仍然收到相同的鏈接錯誤。 – MrJman006

+0

我也嘗試過CMAKE_INCLUDE_CURRENT_DIR和CMAKE_CURRENT_BINARY_DIR – MrJman006