C/C++笔记-写一个Makefile并链接QtCore库使用QString,QDebug

news2024/11/18 13:36:59

如下cpp代码,调用QDebug打印程序:

#include <QDebug>
#include <QString>


int main(int argc, char *argv[]){

        QString testStr = "hello";
        qDebug() << testStr;

        return 0;
}

如下makefile:

test: main.cpp
        g++ -c -I/opt/Qt5.5.1/5.5/gcc_64/include -I/opt/Qt5.5.1/5.5/gcc_64/include/QtCore -o main.o main.cpp

先进行编译,发现编译报错:

 

报错的地方是qglobal.h从中可以知道,如果想要使用Qt,在编译时需要添加-fPIC选项,

-fPIC:用于生成位置无关的代码(Position-Independent-Code);

添加此选项,并且把链接的命令加上:

Test: main.cpp
        g++ -c -fPIC -I/opt/Qt5.5.1/5.5/gcc_64/include -I/opt/Qt5.5.1/5.5/gcc_64/include/QtCore -o main.o main.cpp
        g++  -o TestQt main.o -L/opt/Qt5.5.1/5.5/gcc_64/lib -lQt5Core                                                   

此时编译没有问题了,但链接会有如下问题:

 估计是环境有问题,在Makefile中添加-Wl,-rpath设置环境变量。

-Wl, -rpath:①用于编译时指定间接引用的库位置,作用同-Wl,-rpath-link;②用于运行时指定所有引用库的位置,作用同修改环境变量(LD_LIBRARY_PATH),并且库路径引用优先级高于LD_LIBRARY_PATH;

完整makefile如下:

Test: main.cpp
        g++ -c -fPIC -I/opt/Qt5.5.1/5.5/gcc_64/include -I/opt/Qt5.5.1/5.5/gcc_64/include/QtCore -o main.o main.cpp
        g++ -Wl,-rpath,/opt/Qt5.5.1/5.5/gcc_64 -Wl,-rpath,/opt/Qt5.5.1/5.5/gcc_64/lib -o TestQt main.o -L/opt/Qt5.5.1/5.5/gcc_64/lib -lQt5Core

这时编译、链接、运行都正常了:

现在程序是能跑了,但这个makefile写得有点拉跨。

下面重新构造个makefile,让这个makefile看起来像稍微有点工作经验的人写的。

PROGRAM = TestQt
OBJECTS = main.o
SOURCE := $(wildcard *.cpp)

LINK = g++
LFLAGS = -c -fPIC
INCPATH = -I/opt/Qt5.5.1/5.5/gcc_64/include -I/opt/Qt5.5.1/5.5/gcc_64/include/QtCore

CXX = g++
CXXFLAGS = -Wl,-rpath,/opt/Qt5.5.1/5.5/gcc_64 -Wl,-rpath,/opt/Qt5.5.1/5.5/gcc_64/lib
LIBS = -L/opt/Qt5.5.1/5.5/gcc_64/lib -lQt5Core

$(OBJECTS): $(SOURCE)
        $(LINK) $(LFLAGS) $(INCPATH) -o $@ $<
        $(CXX) $(CXXFLAGS) -o $(PROGRAM) $@ $(LIBS)


.PHONY: clean
clean:
        rm -f *.o $(PROGRAM) 

解释其中的几点:

①wildcard:匹配,获取当前目录所有.cpp文件

②$@:获取标签“:”冒号前面的字符串;

③$<:获取标签“:”冒号后也就是$(SOURCE)的一条数据,相当于循环遍历那样,依次运行这条命令。

源码打包下载地址:

https://github.com/fengfanchen/CAndCPP/tree/master/MakefileQtConsole

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

‘gulp‘ 不是内部或外部命令,也不是可运行的程序

出现问题&#xff1a; D:\git\renwey-web-mobile>gulp default gulp 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 两种原因 原因一&#xff1a;环境变量没有设置 原因二&#xff1a;没有安装全局的gulp&#xff0c;只安装了本地gulp&#xff0c;…

CTFShow-Web篇详细wp

CTFShow-Web篇详细wp web签到题web2web3web4web5web6web7web8 CTFShow 平台&#xff1a;https://ctf.show/ web签到题 直接F12然后Base64解码 ctfshow{19bdf375-f974-481e-8c62-0f4c3d170fb4} web2 考点&#xff1a;联合查询 先尝试使用万能密码登入 ‘ or 11# 登入成功&am…

NFS共享服务

文章目录 1.NFS1.1 NFS简介1.2 RPC简介1.3 NFS网络文件系统1.4 NFS应用场景1.5 NFS通讯原理 2.NFS配置 1.NFS 1.1 NFS简介 NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计算机之间通…

产品的技术加油站

作为产品经理的你&#xff0c;每次被喷不懂技术的时候&#xff0c;是否也曾想过暗暗发力&#xff0c;恶补一波技术&#xff0c;然后惊艳所有人&#xff1f;但冷静之后&#xff0c;又觉得无从下手&#xff1f; 是不是还想过要不要学习一下编程&#xff1f;然后被人推荐了什么py…

【致敬未来的攻城狮计划】— 连续打卡第十天:FSP固件库开发及FSP配置详解。

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

Gnuplot绘图入门2——根据多列文本数据绘制图形

Gnuplot绘图入门2——根据多列文本数据绘制图形 Gnuplot绘图入门1以绘制sin(x)的函数图形为例&#xff0c;对Gnuplot进行了简要介绍。这个教程将介绍如何使用Gnuplot对保存在文本文件&#xff08;.txt、.dat文件&#xff09;中的数据进行可视化。 将下面的数据复制下了&#…

Python高光谱遥感数据处理与机器学习实践技术

目录 第一章 高光谱基础 第二章 高光谱开发基础&#xff08;Python&#xff09; 第三章 高光谱机器学习技术&#xff08;python&#xff09; 第四章 典型案例操作实践 总结了高光谱遥感技术领域的基础原理与核心概念&#xff0c;采用编程语言复现经典数据处理和应用方法&am…

OpenHarmony应用开发-ArkUI方舟开发框架简析

方舟开发框架&#xff08;简称ArkUI&#xff09;为OpenHarmony应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界…

ChatGPT会被人工智能干掉吗?

01 ChatGPT火爆全球 ChatGPT是美国“开放人工智能研究中心”2022年11月30日发布的聊天机器人程序&#xff0c;它是人工智能技术驱动的自然语言处理工具&#xff0c;能通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样…

pcl中MomentOfInertiaEstimation计算有向包围盒

pcl::MomentOfInertiaEstimation 是 Point Cloud Library (PCL) 中的一个类&#xff0c;用于计算点云中物体的矩。它可以提供点云物体的三个主轴及其长度&#xff0c;以及物体的惯性矩阵等信息。通过使用 pcl::MomentOfInertiaEstimation 类&#xff0c;可以实现物体形状分析、…

C++类和对象-3

承接上一篇博客中内容&#xff0c;讲述完类和对象中构造函数内容之后&#xff0c;这篇博客我们来讲述类和对象中&#xff0c;析构函数的内容。 目录 1.析构函数 2.拷贝构造函数 3.浅拷贝与深拷贝 1.析构函数 在类和对象的构建当中&#xff0c;类中的对象会通过构造函数来…

Jenkins配置邮箱发送报告

本文以qq邮箱为例 1.下载Email Extension Plugin插件 2.在Manage Jenkins--System&#xff0c;Jenkins Location下配置理员邮件 Extended E-mail Notification 下配置Jenkins SMTP server&#xff08;邮箱服务&#xff09;、SMTP Port&#xff08;邮箱端口&#xff09;、Cred…

c++学习(day4)

文章目录 一. 友元&#xff08;friend&#xff09;1 友元函数1.1 全局函数作为友元函数1.2 类的成员函数作为友元函数&#xff08;了解&#xff09; 2. 友元类3. 使用友元的注意事项 二. 常成员函数和常对象&#xff08;const&#xff09;1. 常成员函数2. 常对象3. mutable关键…

【微服务笔记17】微服务组件之Gateway实现动态路由、配置路由规则、路由过滤器

这篇文章&#xff0c;主要介绍微服务组件之Gateway实现动态路由、配置路由映射规则、路由过滤器。 目录 一、动态路由配置 1.1、动态URI路由配置 &#xff08;1&#xff09;引入eureka客户端依赖 &#xff08;2&#xff09;添加路由配置 1.2、服务名称转发配置 二、断言配…

基于 Windows 安装 ESP32 Arduino 软件开发环境

ESP32 Arduino 源码库&#xff1a;arduino-esp32ESP32 Arduino 环境搭建说明&#xff1a;About Arduino ESP32 其他软件环境需求&#xff1a; Git 环境 1、安装 Arduino 软件 可在 Arduino 官网 获取 Windows 端 Arduino 安装包&#xff0c;如下&#xff1a; 使用如下 .exe 一…

JVM类加载过程

文章目录 1、加载2、链接2.1 验证2.2 准备2.3 解析 3、初始化3.1 类初始化练习3.2 懒汉式单例练习 4、类加载器4.1 启动类加载器4.2 扩展类加载器4.3 双亲委派模式4.4 线程上下文类加载器4.4 自定义类加载器 5、运行时优化5.1 即时编译逃逸分析方法内联&#xff08;Inlining&am…

StressAppTest的简介

StressAppTest的全称是Stressful Application Test (stressapptest) 的简称http://code.google.com/p/stressapptest/ 这里我们可以将其简化为SAT。 SAT试图让来自处理器和I/O到内存的数据尽量随机化,以创造出模拟现实的环境来测试现在的硬件设备是否稳定。 SAT的大概作用如…

【Mysql 学习笔记】

Mysql 笔记记录 MySQL学习笔记一、 DDL1. DDL 查询和创建数据库2. DDL 修改、删除、使用数据库3. DDL 查询数据表4. DDL 创建数据表5. DDL 修改数据表6. DDL 删除数据表 二、DML MySQL学习笔记 一、 DDL 1. DDL 查询和创建数据库 #查询所有数据库 SHOW DATABASES; #查询某个数…

PMP项管2023年5月的备考准备攻略!现在看还来得及!

2023年共有4次PMP考试&#xff0c;分别是3月、5月、8月、11月&#xff0c;由于3月份考试不开放新报名&#xff0c;所以第一次备考PMP的同学可以选择参加5月份考试。那么&#xff0c;现在备考5月份PMP考试还来得及吗&#xff1f; 现在开始备考5月PMP考试&#xff0c;时间是非常…

蓝牙技术|消息称三星正研发智能戒指Galaxy Ring

根据韩媒 MT 报道&#xff0c;三星内部正在开发继 Galaxy Watch、Galaxy Fit 之后的另一款健康追踪设备 Galaxy Ring。 报道称这款智能戒指配备 PPG&#xff08;光电容积脉搏波&#xff09;传感器和 ECG&#xff08;心电图&#xff09;传感器&#xff0c;可以准确追踪佩戴者的…