【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
linux上位机写程序,大家都喜欢用designer设计界面,用qt creator编写程序。这样其实也无可厚非。但是从效率和快速开发的角度来说,这么做其实是没有必要的。我们完全可以通过自己的方法来实现一个比较好的开发环境。今天,就来简单讨论下,如果是用于嵌入式linux qt界面开发,怎么开发和编译比较好。
1、传统的qt creator开发
传统的方式,也是qt本身推荐的方式,那就是借助于qt creator来进行处理。本质上它就是一个IDE,既可以设计界面,也可以开发代码。但是从可用性和复用性来说,个人感觉价值不是很高。为了开发qt记住的那些技巧,在开发其他软件的时候完全派不上用场。
2、借助于命令行进行开发
在嵌入式卡片电脑上面,如果准备好了qt的运行环境,其实是可以在widnows上面准备好文件之后,直接在卡片电脑上编译运行的。我们还知道,qt一般依赖于这么几个命令,
(1)uic命令,它的作用就是把ui文件翻译成头文件;
(2)moc命令,它的作用就是提取头文件里面的Q_OBJECT信息,翻译成cpp文件;
(3)头文件目录和动态库文件。
所以,知道了这些之后,我们其实就可以自己写一个批处理文件,也是可以实现正常编译的,文件不多的情况下,效率还特别地高,
uic QtWidgetsApplication.ui -o ui_QtWidgetsApplication.h
moc -o moc_QtWidgetsApplication.cpp QtWidgetsApplication.h
g++ main.cpp QtWidgetsApplication.cpp moc_QtWidgetsApplication.cpp -o main -I /usr/include/aarch64-linux-gnu/qt5 -I /usr/include/aarch64-linux-gnu/qt5/QtWidgets -I /usr/include/aarch64-linux-gnu/qt5/QtGui -I /usr/include/aarch64-linux-gnu/qt5/QtCore -lQt5Widgets -lQt5Gui -lQt5Core
3、编写Makefile编译
qt creator创建工程的时候,其实有一个pro文件,这个文件就是用来创建编译脚本的。既然是这样,我们也可以自己创建Makefile进行编译。和批处理文件相比较,它可以实现增量编译,这样我们每次编译的时候,只需要编译那个修改过的文件就好了,整体编译的效率也会更高。
这个Makefile只要写一次就好了,后面把它当成模板,改一改就可以使用了。
.PHONY: all clean
INCLUDE_DIR=-I /usr/include/aarch64-linux-gnu/qt5 \
-I /usr/include/aarch64-linux-gnu/qt5/QtWidgets\
-I /usr/include/aarch64-linux-gnu/qt5/QtGui \
-I /usr/include/aarch64-linux-gnu/qt5/QtCore
all: main
main: main.o QtWidgetsApplication.o moc_QtWidgetsApplication.o
g++ -g $^ -o main -lQt5Widgets -lQt5Gui -lQt5Core
main.o: main.cpp QtWidgetsApplication.h
g++ -g -c main.cpp -o main.o $(INCLUDE_DIR)
QtWidgetsApplication.o: QtWidgetsApplication.cpp QtWidgetsApplication.h
g++ -g -c QtWidgetsApplication.cpp -o QtWidgetsApplication.o $(INCLUDE_DIR)
QtWidgetsApplication.h:ui_QtWidgetsApplication.h
ui_QtWidgetsApplication.h: QtWidgetsApplication.ui
uic $^ -o ui_QtWidgetsApplication.h
moc_QtWidgetsApplication.o : moc_QtWidgetsApplication.cpp
g++ -g -c moc_QtWidgetsApplication.cpp -o moc_QtWidgetsApplication.o $(INCLUDE_DIR)
moc_QtWidgetsApplication.cpp : QtWidgetsApplication.h
moc -o moc_QtWidgetsApplication.cpp QtWidgetsApplication.h
clean:
rm -rf main *.o ui_*.h moc_*.cpp