Cmake 编译QT4工程 Linux下 Cmake 编译Qt5
open Object 按钮不好使 可能是没有选择默认打开方式
寻找qt库路径 需要再跟节点的CMAKELIST 下编写
find_package(Qt4 REQUIRED QtCore QtGui QtXml)
错误总结
报错 无法打开 ui_xxx.h
寻找ui_xxx.h 文件 也需要再根节点下编写 如果在具体项目文件夹下编写 也会找到不到
# 自动运行moc
set(CMAKE_AUTOMOC ON)
# 自动运行uic
set(CMAKE_AUTOUIC ON)
# 自动运行rcc
set(CMAKE_AUTORCC ON)
也有可能#include ui_xxxx.h 在第一位 没有进行防止头文件重复包含
有时会报moc 重定义
编译报错 QMetaObjectExtraData const YYDSApplication::staticMetaObjectExtraData" (?staticMetaObjectExtraData@YYDSApplication@@0UQMetaObjectExtraData@@B) 已经在 mocs_compilation.obj 中定义
有时候编译build两个文件 原因是因为头文件和.cpp两个名字不相同导致的
这个错误通常是由于多个源文件包含相同的 moc
文件所致。在使用 CMake
进行 Qt
项目构建时,需要确保 moc
文件只被生成和编译一次。AUTOMOC
会自动生成并处理 moc
文件,但有时候手动配置可能会产生重复的定义
确保 当前工程目录下只有一个moc
且不能对moc 处理两次 set(CMAKE_AUTOMOC ON) 已经生成了moc_xxx.h
这个错误通常发生在使用 AUTOMOC
和手动调用 qt4_wrap_cpp
处理同一个文件时。在这种情况下,需要确保 moc
文件只生成一次并且不重复包含
安装需要权限报错
Maybe need administrative privileges
从这条错误信息可以看出,CMake 试图在 C:/Program Files (x86)/TempDCF/bin
目录下创建文件夹时遇到了权限问题。系统提示 Maybe need administrative privileges
,这表明操作需要管理员权限
********************************************分界线********************************************************
Qt5 寻找库目录为
find_package(Qt5 COMPONENTS Core Gui Qml Quick Widgets REQUIRED)
报错问题汇总
找不到GL这个错误是由于缺少 OpenGL 开发头文件。在 Linux 系统上,Qt5 需要 OpenGL 库来进行图形渲染。具体来说,它找不到 GL/gl.h
头文件,这是 OpenGL 的一部分
Failed to find "GL/gl.h" in "/usr/include/libdrm"
可以使用以下命令来安装所需的包
sudo apt-get update
sudo apt-get install libgl1-mesa-dev
错误二:
CMake Error at DCFRAME/CMakeLists.txt:12 (add_executable):
Target "DCFRAME" links to target "Qt5::QtXml" but the target was not found.
Perhaps a find_package() call is missing for an IMPORTED target, or an
ALIAS target is missing?
这个错误提示说明你的 CMakeLists.txt 文件中尝试链接到 Qt5::QtXml
和 Qt5::QtNetwork
目标,但是 CMake 没有找到这些目标。这通常是因为你没有在 CMakeLists.txt
文件中正确地调用 find_package
来查找这些 Qt 模块
find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Xml Network)
查看链接库是否写错
2. AUTOUIC找不到ui文件
fatal error: ui_XXX.h: 没有那个文件或目录 28 | #include "ui_XXX.h"
这个错误通常是因为 qt5_wrap_ui
没有正确生成 ui_XXX.h
文件,或生成的文件路径不正确。为了确保所有相关文件正确生成和包含,请确保在 CMakeLists.txt
文件中设置了正确的生成和包含路径。
由于采用set(CMAKE_AUTOUIC ON)的方式处理ui文件,编译时会报错找不到ui文件。
需要将ui文件夹加入AUTOUIC的搜索目录,这样AUTOUIC处理时才能找到ui文件。
解决方法:
list(APPEND CMAKE_AUTOUIC_SEARCH_PATHS "ui")
注意:是CMAKE_AUTOUIC_SEARCH_PATHS,而不是AUTOUIC_SEARCH_PATHS。这个把我坑惨了。
接下来可能会继续报错找不到生成的对应的ui_XXX.h头文件,可以尝试以下选项之一:
因为自动生成的ui_XXX.h头文件是在构建目录下的,添加它即可。
# 其实只要这一条就够了,后面两条似乎也可以。
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories(${CMAKE_BINARY_PATH})
include_directories(${CMAKE_CURRENT_BINRAY_PATH})
3. AUTOMOC找不到定义(undefined to 'vtable for XXX')
这个是最让我头疼的,cmake官网也没有说怎么解决。(这部分还专门翻译了一下,见我的另一篇博客:cmake-qt AUTOMOC)
看到网上的解释,意思是如果你不在add_executable()中添加使用了Qt元系统的头文件,那么AUTOMOC就不会处理这些头文件。
所以我们把Qt的头文件加入到add_executable()即可,这也是我为什么将普通头文件和Qt头文件分离开的原因之一(因为普通头文件不需要,虽然加上也没错)。
add_executable(${EXE} ${SRC} ${INC})
构建过程:
cd /path/to/your/project/build
cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake --build .
cmake --install .
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
cmake --install .
原文地址:https://blog.csdn.net/YUyang0304/article/details/140237678
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!