废话不多说,直接上Makefile
# 设置交叉编译后的qt的路径
QT_INSTALL_DIR=/usr/local/arm/qt4.8.6
# 设置交叉编译链
COMPILER_PREFIX = arm-linux-gnueabihf-
CC=$(COMPILER_PREFIX)gcc
CXX=$(COMPILER_PREFIX)g++
AR=$(COMPILER_PREFIX)ar
STRIP=$(COMPILER_PREFIX)strip
MOC=$(QT_INSTALL_DIR)/bin/moc
UIC=$(QT_INSTALL_DIR)/bin/uic
QRC=$(QT_INSTALL_DIR)/bin/rcc
# 设置交叉编译后的tslib的路径
TSLIB_INSTALL_DIR=/home/xxxxxx/tslib
###############################################################################################################################################
# QT相关变量配置
###############################################################################################################################################
QT_INC_INS = $(QT_INSTALL_DIR)/include/
QT_INC_DIR = $(shell find $(QT_INC_INS) -type d)
QT_INC := $(addprefix -I,$(QT_INC_DIR))
QT_LIB := -L$(QT_INSTALL_DIR)/lib -lQt3Support -lQtDeclarative -lQtMultimedia -lQtScript -lQtSql -lQtTest -lQtCore -lQtGui -lQtNetwork -lQtScriptTools -lQtSvg -lQtXml
###############################################################################################################################################
# TSLIB相关变量配置
###############################################################################################################################################
TS_LIB := -L$(TSLIB_INSTALL_DIR)/install/lib -lts
INC := -I. $(QT_INC)
LIB := $(QT_LIB) $(TS_LIB)
LIB += -lpthread
CFLAGS := $(INC)
LDFLAGS := -Wl,-gc-sections $(LIB)
DEFINES := -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
TARGET=qt_test
SRC_DIR := ./
OBJ_DIR := /tmp/obj
MOC_DIR := /tmp/obj/.moc
UIC_DIR := /tmp/obj/.uic
QRC_DIR := /tmp/obj/.qrc
HEADERS := $(wildcard ${SRC_DIR}/*.h) $(wildcard ${SRC_DIR}/*.hh)
SOURCES := $(wildcard ${SRC_DIR}/*.c) $(wildcard ${SRC_DIR}/*.cpp)
UI_FILE := $(wildcard ${SRC_DIR}/*.ui)
UI_HEADERS := $(patsubst ${SRC_DIR}/%.ui, ${OBJ_DIR}/.uic/ui_%.h, $(UI_FILE))
OBJS := $(patsubst ${SRC_DIR}/%.c, ${OBJ_DIR}/%.o, $(patsubst ${SRC_DIR}/%.cpp, ${OBJ_DIR}/%.o, $(SOURCES)))
OBJS += $(patsubst ${SRC_DIR}/%.h, ${OBJ_DIR}/.moc/moc_%.o, $(patsubst ${SRC_DIR}/%.hh, ${OBJ_DIR}/.moc/moc_%.o, $(HEADERS)))
INC +=-I$(UIC_DIR)
ifneq ( $(OBJ_DIR),$(wildcard $(OBJ_DIR)) )
$(shell mkdir -p $(OBJ_DIR))
endif
ifneq ( $(MOC_DIR),$(wildcard $(MOC_DIR)) )
$(shell mkdir -p $(MOC_DIR))
endif
all:$(TARGET)
clean:
rm -rf $(OBJ_DIR)
$(TARGET):$(OBJS) $(COMM_OBJ) $(UI_HEADERS)
$(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS)
cp $@ $(NFS_DIR)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c
$(CC) -c $(CFLAGS) $< -o $@
$(OBJ_DIR)/%.o:${SRC_DIR}/%.cpp
$(CXX) -c $(CFLAGS) $< -o $@
$(OBJ_DIR)/.moc/%.o:${OBJ_DIR}/.moc/%.cpp
$(CXX) -c $(CFLAGS) $< -o $@
# 使用moc预编译头文件
$(OBJ_DIR)/.moc/moc_%.cpp:${SRC_DIR}/%.h
$(MOC) $(DEFINES) $(CFLAGS) $< -o $@
$(OBJ_DIR)/.moc/moc_%.cpp:${SRC_DIR}/%.hh
$(MOC) $(DEFINES) $(CFLAGS) $< -o $@
# 使用UIC编译UI文件(不使用QT creator不建议使用ui文件进行UI设计)
$(OBJ_DIR)/.uic/ui_%.h:$(SRC_DIR)/%.ui
$(UIC) $< -o $@
# 使用rcc编译资源文件
$(QRC_DIR)/%.o:$(QRC_DIR)/%.cpp
@$(CXX) -c $(CFLAGS) $^ -o $@
$(QRC_DIR)/qrc_%.cpp:$(SRC_DIR)/%.qrc
@$(QRC) -name resources $^ -o $@
用此Makefile可以管理自己的qt工程,不需要再用QT Creator去进行工程管理
释义篇
本Makefile与通用的C/C++编译大体相同。
区别在于几个Qt特有编译工具的使用:
- moc 是qt对头文件中Qobject等特殊Qt特有的语法的一个预编译工具。
- rcc 是一个资源打包工具,将图片等资源进行压缩后以数组的形势编译进可执行程序中
- uic 是一个xml解释器,将由QtDesigner生成的XML格式的用户界面定义文件(.ui文件)编译生辰对应的C++文件
示例程序下载
gitee下载:https://gitee.com/Cooper0/qt_test
CSDN下载:https://download.csdn.net/download/cooper1024/21460811?spm=1001.2014.3001.5501