QT通过追加编译开关来区分PC机linux系统和arm开发板环境上运行的代码
背景:arm开发板上的程序是在PC机的linux系统上编写的,需要在PC的linux系统编译和调试,查看运行结果,但是最终还是要在arm开发板上运行,在调试过程中,由于2个开发环境的差异,会导致代码的不同,例如代码中涉及到的路径的内容就不一样,加入编译开关后,就避免了每次在开发板运行的时候,都需要修改代码,使用方便。
方法:追加宏定义“#ifdef __arm__”,表示代码在arm系统上有效。
注意:需要追加头文件的定义“#include <QtGlobal>”,在“<QtGlobal>”中定义了许多全局宏定义的宏。
#ifdef Q_OS_LINUX:表示代码在linux系统上有效
#ifdef Q_OS_UNIX:表示代码在unix系统上有效
示例如下:
--------------------------------
#include <QtGlobal>
#ifdef __arm__
/* 可以在嵌入式ARM开发板运行的代码 */
/* 注意“arm”前后都有2个下划线“_” */
#else
/* 在PC机的linux系统上运行的代码 */
#endif
-------------------------------------
#
arm
64 的
编译
宏
contains(QMAKE_HOST.arch, aarch64){
#aarch64 是
编译
器类型,如果不是这个
编译
器, 可以把.arch 替换成对应的类型
#
arm
64平台
最近在做有关
嵌入式
的东西,很多不懂。
1、想在板子上
运行
用
QT
编好的程序,必须要在PC的
linux
系统里用
QT
编吗?
2、在windows系统里编好的
QT
程序,经过交叉
编译
后能直接
运行
在板子上吗?还是板子需要弄个
QT
环境啥的?就是往里面安个相同版本的
QT
?
谢谢。。。。。
1、想在板子上
运行
用
QT
编好的程序,必须要在PC的
linux
系统里用
QT
编吗?
不需要.但是必须经过交叉
编译
. (win
1.Busybox源码请网上自行下载,
编译
方法请参考百度。
2.交叉
编译
工具链的设置也请先设置好。
如果以上1、2没有问题,那么可以使用以下脚本,制作一个给
ARM
开发板
使用的文件系统。
可以自行定制使用,加入自己的Test demo。
#!/bin/bash
#yuanxin.yang develop 2015-07-05
#文件系统和Busybox的路径====>可自己定制
FILESYSTEM=/Softwave/filesystem #定义自己制作的文件系统存放的位置
BUSYBOX=/Softwave/
arm
/busybox-1.17.2 #Busybox软体的位置
在
嵌入式
Linux
应用中,有时会用到图形界面。在目前流行的图形界面中,比较有名的当数
Qt
。
Qt
是1991年由挪威Trolltech公司开发的一个跨平台C++图形用户界面应用程序开发框架,主要用来开发GUI(Graphical User Interface)程序。
Qt
是面向对象的框架,使用特殊的
代码
生成扩展(称为元对象
编译
器(Meta Object Compiler, moc))以及一些宏,
Qt
很容易扩展,并且允许真正地组件编程。
Qt
作为一个跨平台的GUI 框架,在源码上对所有平台都是一致的,Unix/Lin
1、可执行程序在终端中
运行
前,需要配置好环境变量,我们用export的形式配置的,这种形式只在当前终端中生效(因为,如果我们手动
运行
进程时,会出现缺库等错误,此时只要在当前终端中在export 一下就可以了。)
2、我们发布exe程序时,也是要将plugin lib等打包发布的。
qt
creator下载地址:https://download.
qt
.io/archive/
qt
creator/
因为我机器是
linux
arm
架构,所以要选择tar.gz直接
编译
(纯
linux
可以选择.run的文件,直接chmod给权限,然后
运行
)。
我这里选择的是2.8.1版本,
qt
-creator-2.8.1-src.tar.gz
2. 解压(你自己指定解压路径),查看文档,并执行文档内容
这里有个文档,README,打开,看到他有
编译
的提示,我下面翻译一
https://www.cnblogs.com/Braveliu/p/5107550.html
https://blog.csdn.net/simonforfuture/article/details/78580510
https://www.cnblogs.com/xiangtingshen/p/11002464.html
https://blog.csdn.net/abeldeng/article/details/25029507
DESTDIR:
用于指明
编译
的目标文件的输.
ARM
NEON 编程系列2 - 基本指令集前言本系列博文用于介绍
ARM
CPU下NEON指令优化。博文github地址:github相关
代码
github地址:githubNEON指令集主流支持目标平台为
ARM
CPU的
编译
器基本都支持NEON指令。可以通过在
代码
中嵌入NEON汇编来使用NEON,但是更加常见的方式是通过类似C函数的NEON Instrinsic来编写NEON
代码
。就如同NEON ...
使用的
arm
编译
器为aarch64, 很多博客都是使用 QMAKE_HOST.arch 进行判断,但这并不能分辨出 aarch64
编译
器,有的更离谱的是定义一个函数,实在让人无言,自行尝试解决方案如下:
contains(
QT
_ARCH,
arm
64){
message("
arm
64") #在这里处理
arm
64所需
}else{
message("x86")
linux
/windows
区分
:
win32{
//do something...
unix{
//do something...
你应该用CONFIG += c++11自动启用C ++ 11
编译
器标志。在
qt
安装中查找.prf个文件。 我不知道它们在Windows上的位置,但在我的
Linux
安装中,它们不在/opt/
Qt
/5.4/gcc_64/mkspecs/features。您可能想要阅读qmake文档:可以使用其他配置功能设置qmake 在功能(.prf)文件中指定。 这些额外功能通常提供 支持在构建过程中使用的...
程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与
Linux
操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在
Linux
GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个
Linux
用户的必修功课之一。
Linux
的Shell种类
我们在使用
QT
编程的时候,有时会遇到跨平台的状况(毕竟
QT
本身就是因优秀的跨平台特性而出名),在这种情况下,判断当前是哪一种平台就非常必要了,这里介绍一下
QT
提供的各种判断操作系统和
编译
平台的做法:
1、如果仅仅想要当前是windows、mac还是
linux
系统的话,可以直接使用宏:
Q_OS_
LINUX
:定义在
linux
系统中
Q_OS_WIN:定义在windows系统中
Q_OS_OS...