在arm板子上编译搭建qmake
https://blog.csdn.net/qq_41884002/article/details/116942605?tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1
1 基于qt creator生成makefile
基于qt creator中的qmake构建makefile后
进入终端,可以敲命令进行编译:
在ubuntu下安装qt creator后,使qmake等生效的,设置如下:
sudo gedit /etc/profiles
#willis add
export PATH="/home/tf/Qt5.8.0/5.8/gcc_64/bin:$PATH"
export QIDIR=/home/tf/Qt5.8.0/5.8/gcc_64/
export MANPATH=/home/tf/Qt5.8.0/5.8/gcc_64/man/:$MANPATH
export LD_LIBRARY_PATH="/home/tf/Qt5.8.0/5.8/gcc_64/lib:$LD_LIBRARY_PATH"
2 基于qmake生成makefile
<1>第1步:先构建文件夹目录,如下:
include :对外的头文件.h ,release时用
src :cpp和私有的头文件.h
prj_linux:构建工程使用,包含pro和pri文件
<2>第2步:生成pro文件和pri文件
cd prj_linux/
qmake -project ../ -o qtcpp.pro
这里生成的pro文件,包含了.h/.c/cpp等源文件,用在pri文件里
直接将pro文件重名成pri,删除其它定义
# Input
HEADERS += ../include/server/factory.hpp
SOURCES += ../src/server/factory.cpp
<3> 第3步: 手动新建pro文件,修改pro文件,将pri文件包含进来
pro文件模板如下:
TEMPLATE = app
TARGET = qtcpp
QMAKE_CXXFLAGS += -std=c++11 -O2
#去掉qt的依赖
#QT += core
QT -= core gui
CONFIG += debug
#CONFIG += release
INCLUDEPATH += ./../include \
LIBS += \
#目标生成的目录
DESTDIR = ./../bin
#临时生成的目录
DEPENDPATH += .
CONFIG(debug, debug|release) {
QMAKE_CXXFLAGS += -Wall -g
MOC_DIR += ./build/debug/moc
OBJECTS_DIR += ./build/debug/obj
UI_DIR += ./build/debug/ui
RCC_DIR += ./build/debug/rcc
} else {
MOC_DIR += ./build/release/moc
OBJECTS_DIR += ./build/release/obj
UI_DIR += ./build/release/ui
RCC_DIR += ./build/release/rcc
}
include(../prj_linux/qtcpp.pri)
<4>第4步: 构建makefile进行编译
如果debug编译还是release编译,修改pro文件
CONFIG += debug
#CONFIG += release
all:qtcpp_build
clean:qtcpp_clean
qtcpp_build:
cd ./prj_linux/ ; qmake .;
$(MAKE) -C ./prj_linux;
qtcpp_clean:
cd ./prj_linux/ ; qmake .;
$(MAKE) -C ./prj_linux/ clean;
make -s 2>1: warning和error信息会输出到1文件里
make -s >1: warning和error信息会输出到终端里,正常的信息会输出到1里
编译多个工程时,新建Makefile
appsubdirs=sub1 sub2
app:
for d in $(appsubdirs); do (cd $$d; (if test -e "Makefile"; then $(MAKE) $(MFLAGS); fi;) ); done
cleanapp:
for d in $(appsubdirs); do (cd $$d; (if test -e "Makefile"; then $(MAKE) clean; fi;) ); done
3 qt默认带的变量解释
DEFINES+=QT_DEPRECATED_WARNINGS:定义编译选项。
QT_DEPRECATED_WARNINGS表示当Qt的某些功能被标记为过时的,那么编译器会发出警告。
常用的pro模板,生成动态库
TARGET = camera
#生成so的路径,直接放到bin文件夹下
PROPWD = ../..
DESTDIR = ../../bin
QT -= qt core gui
#配置:静态库还是动态库,这里是动态库
TEMPLATE = lib
CONFIG += plugin
#CONFIG += staticlib
#配置:正式用=release,调试时=debug
CONFIG += debug
#CONFIG += release
#配置:其它相关设置
CONFIG += c++11
CONFIG += warn_off
#配置:源码里的宏参数
#DEFINES += OS_LINUX _CLASS_Adapter_DLL SDKONVIF_LIBRARY SDK28181_LIBRARY
DEFINES += OS_LINUX
#配置:系统里的参数
DEFINES += QT_DEPRECATED_WARNINGS
#包含头文件路径
INCLUDEPATH += $${PROPWD}/include
#包含库文件
LIBS += -Wl,-rpath=./:./ffmpeg/Hard:./ffmpeg:./live555:./RtmpLib
LIBS += -L$${PROPWD}/bin/ffmpeg
#临时生成的目录
DEPENDPATH += .
#编译生成的文件路径设置
CONFIG(debug, debug|release) {
QMAKE_CXXFLAGS += -Wall -g
MOC_DIR += ./build/debug/moc
OBJECTS_DIR += ./build/debug/obj
UI_DIR += ./build/debug/ui
RCC_DIR += ./build/debug/rcc
} else {
MOC_DIR += ./build/release/moc
OBJECTS_DIR += ./build/release/obj
UI_DIR += ./build/release/ui
RCC_DIR += ./build/release/rcc
}
#包含源文件
include(camera.pri)