Cmake 编译QT4工程 Linux下 Cmake 编译Qt5

news/2024/11/22 15:43:20/

open  Object 按钮不好使 可能是没有选择默认打开方式

寻找qt库路径 需要再跟节点的CMAKELIST 下编写

find_package(Qt4 REQUIRED QtCore QtGui QtXml)

错误总结

报错 无法打开 ui_xxx.h

寻找ui_xxx.h 文件 也需要再根节点下编写  如果在具体项目文件夹下编写 也会找到不到

# 自动运行mocset(CMAKE_AUTOMOC ON)
# 自动运行uicset(CMAKE_AUTOUIC ON)
# 自动运行rccset(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::QtXmlQt5::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 .


http://www.ppmy.cn/news/1549072.html

相关文章

【JavaSE】【多线程】定时器

目录 一、定时器简介1.1 Timer类1.2 使用案例 二、实现简易定时器2.1 MyTimerTask类2.2 实现schedule方法2.3 构造方法2.4 总代码2.5 测试 一、定时器简介 定时器:就相当于一个闹钟,当我们定的时间到了,那么就执行一些逻辑。 1.1 Timer类 …

修改docker0默认IP地址

第一步:vim /etc/docker/daemon.json { “registry-mirrors”: [“​ ​https://docker.mirrors.ustc.edu.cn​​”] , “bip”:“172.31.0.1/16” } ,该地址就是docker0启动后的IP地址 第二步:重启docker服务 systemctl restart dock

Uniapp 简单配置鸿蒙

Uniapp 简单配置鸿蒙 前言下载并配置鸿蒙IDEHbuilder X 配置基本的信息生成相关证书登录官网获取证书IDE配置证书添加调试设备可能出现的问题前言 如今鸿蒙的盛起,作为多端开发的代表也是开始兼容鸿蒙应用的开发,接下来我将介绍如何在uniapp中配置鸿蒙。 注意:hbuilder X的…

Vue 3 组件通信:深入理解 Props 和 Emits 的使用与最佳实践

Vue 3 中的 props 和 emits 是组件通信的基础,它们允许组件之间的数据流动和事件触发。以下是 Vue 3 中 props 和 emits 的详细知识点: Props 一. 基础用法 在Vue中,props 是父组件传递给子组件的数据。以下是在父组件中定义和传递 props …

测试使用vite搭建的uni-app打包app区分开发环境和生产环境

用脚手架搭建的uniapp项目,打包H5和小程序可以和web端一样,能够通过env.dev和env.prod区分开发环境和生产环境,但是不知道打包成app时如何区分开发环境和生产环境,在此做一个测试记录。 打开package.json文件,在scrip…

WPF应用程序的生命周期-笔记

应用程序的生命周期 窗体的生命周期: window是一个控件 window中的事件:从window创建到关闭我们称之为窗体的生命周期 每一个窗体的生命周期都是独立的,窗体与窗体之间的生命周期都是独立的 最早加载的事件 控件的事件触发 基本所有的控件都继承与Framework 在WPF中基本所有的…

泷羽sec----shell编程(7)

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

逆向攻防世界CTF系列40-ReverseMe-120

逆向攻防世界CTF系列40-ReverseMe-120 直接定位到关键函数 int __cdecl main(int argc, const char **argv, const char **envp) {unsigned int v3; // edxunsigned int v4; // ecx__m128i si128; // xmm1unsigned int v6; // esiconst __m128i *v7; // eax__m128i v8; // xm…