Qt MOC无法识别include目录头文件,如何免改结构解决链接错误?
无需修改结构或显式添加头文件解决Qt6 vtable链接错误
本问题并非常见的undefined reference to vtable for MainWindow重复问题,我已掌握该编译错误的常规解决方法,但希望在不修改项目结构、也不显式将每个头文件添加到源文件列表的前提下解决问题。
项目结构
. ├── cmake │ ├── ArcGISMapSDK.cmake │ ├── BuildInfo.cmake │ ├── buildinfo.h.in │ ├── FindArcGISRuntime.cmake │ └── QXlsx.cmake ├── CMakeLists.txt ├── src │ ├── ArcGISTest │ │ ├── CMakeLists.txt │ │ ├── include │ │ │ └── arcgis │ │ │ └── mainwindow.h │ │ ├── main.cpp │ │ └── mainwindow.cpp │ └── CMakeLists.txt └── vcpkg.json
src/ArcGISTest下的CMakeLists.txt内容
include(BuildInfo) include(ArcGISMapSDK) include(QXlsx) find_package(Qt6 COMPONENTS REQUIRED Core Widgets Gui ) qt_standard_project_setup() qt_add_executable(arcgis_app main.cpp) target_include_directories(arcgis_app PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" ) target_link_libraries(arcgis_app PRIVATE Qt6::Core Qt6::Widgets Qt6::Gui ) AddBuildInfo(arcgis_app) AddArcGISMapSDK(arcgis_app) AddQXlsx(arcgis_app) include(GNUInstallDirs) install(TARGETS arcgis_app BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) qt_generate_deploy_app_script( TARGET arcgis_app OUTPUT_SCRIPT deploy_script NO_UNSUPPORTED_PLATFORM_ERROR ) install(SCRIPT ${deploy_script}) target_sources(arcgis_app PRIVATE main.cpp mainwindow.cpp )
当前链接错误
[build] /usr/bin/ld: /tmp/ccmNifr0.ltrans4.ltrans.o: in function `MainWindow::MainWindow(QWidget*)': [build] /home/mohammad/Documents/SeeMake/src/ArcGISTest/mainwindow.cpp:27:(.text+0x707c): undefined reference to `vtable for MainWindow'
需求
是否存在无需修改项目结构、也无需像以下方式将头文件添加到源列表的情况下,让MOC正确运行的方法?
target_sources(arcgis_app PRIVATE main.cpp mainwindow.cpp mainwindow.h )
内容的提问来源于stack exchange,提问作者Mohammad Rahimi
相关产品推荐
相关产品推荐

