[英]CLion and Qt5: tuning qmake
我有一個在別處解釋的設置,例如這里。 我在系統范圍內安裝了Qt5
,並且在我的CMakeLists.txt
有必要的行。 我的 IDE 是 Clion。 在我添加Q_OBJECT
宏之前,簡單 GUI 中的一切都很好(我希望它可以將信號連接到插槽)。 現在,當我這樣做時,我得到了undefined reference to vtable
類型錯誤的undefined reference to vtable
,這在網上也有很多。 我的困惑源於這樣一個事實,即有些人建議為您的項目使用Qt5
捆綁的cmake
,這實質上意味着“僅用於 GUI”,我需要更改工具鏈。 但有些人實際上什么也沒說。 都說的是
每次添加/刪除 Q_OBJECT 時,Qt 都會運行 qmake
現在,如何在我的CMakeLists.txt
捕獲它? ——相關部分如下。 我在/usr/lib/qt5/bin
看到了moc
和qmake
; 那么如何將其傳達給CLion
呢?
# ----- GUI part -----
# Qt5 inclusion
# The meta object compiler is one of the core functionality of Qt, it reads a C++ header file and if it finds a
# Q_OBJECT macro, it will produces a C++ source file containing meta object code for the class.
# It's the mechanism that allow signal and slots to work.
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# set(CMAKE_PREFIX_PATH $ENV{QT_DIR}/$ENV{QT_VERSION}/gcc_64/lib/cmake)
set(CMAKE_PREFIX_PATH /usr/lib/qt5/bin/)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# Enable user interface compiler (UIC)
# The user interface compiler is a program that read XML from the .ui file
# generated by Qt Interface Designer and generate C++ code from it.
set(CMAKE_AUTOUIC ON)
if(CMAKE_VERSION VERSION_LESS "3.7.0")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()
set(CMAKE_MODULE_PATH /usr/lib/qt5)
# @see: https://stackoverflow.com/questions/51994603/cmake-qt5-undefined-reference-to-qprinterqprinterqprinterprintermode
SET(QT5_MODULES Widgets PrintSupport)
find_package(Qt5 COMPONENTS ${QT5_MODULES} REQUIRED)
add_subdirectory(${PROJECT_SOURCE_DIR}/extern/qcustomplot)
add_executable(gui
${PROJECT_SOURCE_DIR}/gui/main.cpp
${PROJECT_SOURCE_DIR}/extern/qcustomplot/qcustomplot.cpp)
set_target_properties(gui PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(gui
PUBLIC
Qt5::Core Qt5::Widgets qcustomplot)
別介意冗長的評論; 我最初的 GUI 培訓是在Java Swing
,我發現它們很有用。
編輯:幫助我的是Qt 5 cmake 中提到的qt5_wrapper_cpp
事情失敗,未定義引用 hello world 上的 vtable,以 inc 和 src 作為子目錄
Q_OBJECT
宏需要代碼生成。 這就是為什么您會遇到undefined reference
異常。 我不記得如何為 Qt 配置 cmake 項目,但我建議閱讀https://cmake.org/cmake/help/latest/manual/cmake-qt.7.html 。
像set_target_properties(${PROJECT_NAME} PROPERTIES AUTOMOC TRUE)
應該可以幫助你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.