2016-10-03 38 views
1

我試圖遷移QtProject文件,正是從https://github.com/gamecreature/QtAwesome遷移Qt工程文件的CMake

項目文件,即時通訊試圖遷移QtAwesome庫:

TARGET = QtAwesome 
TEMPLATE = lib 
CONFIG += staticlib c++11 

SOURCES += QtAwesome.cpp 
HEADERS += QtAwesome.h 

isEmpty(PREFIX) { 
    unix { 
     PREFIX = /usr 
    } else { 
     PREFIX = $$[QT_INSTALL_PREFIX] 
    } 
} 

install_headers.files = QtAwesome.h 
install_headers.path = $$PREFIX/include 
target.path = $$PREFIX/lib 
INSTALLS += install_headers target 

RESOURCES += \ 
    QtAwesome.qrc 

而且我的翻譯是:

cmake_minimum_required(VERSION 2.8.11) 

project(QtAwesome) 
file(GLOB_RECURSE CODE_FILES QtAwesome.cpp) 
find_package (Qt5Core REQUIRED) 
ADD_DEFINITIONS(-DQTAWESOME_LIBRARY) 

qt5_add_resources(RESOURCE_FILES QtAwesome.qrc) 
qt5_wrap_cpp(LIB_HEADER_MOC QtAwesome.h) 

add_library(QtAwesome STATIC QtAwesome.cpp QtAwesome.h) 
target_link_libraries(QtAwesome 
    Qt5::Widgets 
) 

它編譯,但是當我嘗試使用此建庫,我得到以下錯誤:

[100%] Linking CXX executable MyProject.exe 
QtAwesome.lib(QtAwesome.cpp.obj) : error LNK2019: unresolved external symbol "int __cdecl qInitResources_QtAwesome(void)" ([email protected]@YAHXZ) referenced in function "public: bool __cdecl QtAwesome::initFontAwesome(void)" ([email protected]@@QEAA_NXZ) 

MyProject.exe : fatal error LNK1120: 1 unresolved externals 
+0

凡LIB_SOURCE被設置? – mascoj

+0

@mascoj我剛剛更新了沒有LIB_SOURCE的cmake文件並設置了我的源文件,並且仍然有問題 –

回答

2

,我們在您的cmake工程幾個問題:

file(GLOB_RECURSE CODE_FILES QtAwesome.cpp) 

您沒有使用CODE_FILES任何地方。此外,使用帶文件名的glob而不是文件模式是無意義的,glob不應該用於收集源(請參閱documentation)。

ADD_DEFINITIONS(-DQTAWESOME_LIBRARY) 

QTAWESOME_LIBRARY不QtAwesome的代碼的任何地方使用(見search result in the repository)。無論如何,如果你必須添加defintions,你可以考慮改爲target_compile_definitions

qt5_add_resources(RESOURCE_FILES QtAwesome.qrc) 
qt5_wrap_cpp(LIB_HEADER_MOC QtAwesome.h) 

RESOURCE_FILESLIB_HEADER_MOC調用add_library時不添加到來源:資源和建設部文件將不會被編譯到庫(我想這是你的主要問題在這裏)。您可以考慮使用CMAKE_AUTOMOCCMAKE_AUTORCC

find_package (Qt5Core REQUIRED) 

# ... 

target_link_libraries(QtAwesome 
    Qt5::Widgets 
) 

要鏈接對Widgets模塊,而只有尋找Core模塊。

您在cmake項目中不需要C++ 11標準:您可能需要使用CMAKE_CXX_STANDARD,或者,如果您知道標準的哪個部分是必需的,請使用compile features

清潔一次,洗你的cmake的項目可能是這樣的:

cmake_minimum_required(VERSION 2.8.11) 

project(QtAwesome) 

set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_CXX_STANDARD_REQUIRED ON) 

set(CMAKE_AUTOMOC ON) 
set(CMAKE_AUTORCC ON) 

find_package(Qt5 REQUIRED COMPONENTS Widgets) 

add_library(QtAwesome STATIC 
    QtAwesome.cpp 
    QtAwesome.h 
    QtAwesome.qrc 
) 
target_link_libraries(QtAwesome 
    Qt5::Widgets 
) 
+0

感謝@wasthishelpful!這工作完美:) –