qmake的使用

2022-08-31 15:13:38 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

前言

在linux环境下进行程序开发时,经常需要使用makefile管理编译代码,特别是一些大型工程,而makefile工具语法晦涩深入研究较为困难,好在有很多工具可以自动生成makefile,qmake就是其中的一种。

qmake特点

  • 为不同的平台的开发项目创建makefile。
  • 可以供给任何一个软件项目使用,而不用管它是不是用Qt写的,尽管它包含了为支持Qt开发所拥有的额外的特征。
  • qmake基于一个项目文件这样的信息来生成makefile。项目文件可以由开发者生成。
  • 不用修改项目文件,qmake也可以为Microsoft Visual Studio生成项目。

.pro文件说明

.pro实例
代码语言:javascript复制
TEMPLATE = lib #lib库,app可执行工程
TARGET = Func
CONFIG  = console c  11 #C  11标准
CONFIG -= qt

DEFINES  = IOS_64 #64位
DEFINES  = IOS_LINUX #Linux系统

QMAKE_CXXFLAGS  = -fPIC
QMAKE_LFLAGS_DEBUG  = -L$$PWD/../../Bin/Debug/
QMAKE_LFLAGS_DEBUG  = -Wl,-rpath=../../Bin/Debug/
QMAKE_LFLAGS_RELEASE  = -L$$PWD/../../Bin/Debug/
QMAKE_LFLAGS_RELEASE  = -Wl,-rpath=../../Bin/Debug/

LIBS  = -ldl #要链接的库
LIBS  = -lboost_thread

release: CurConfig = Release
debug:   CurConfig = Debug

DESTDIR = ../../Bin/$$CurConfig/ #目标文件的最终路径,从pro文件开始的相对路径 
OBJECTS_DIR = obj/$$CurConfig #.o文件的目录

SOURCES  = 
    ../FunPublic/ts1.cpp 
    ../FunPublic/ts2.cpp 
    ../FunPublic/ts3.cpp 

HEADERS  = 
    ../FunPublic/ts1.h 
    ../FunPublic/ts2.h 
    ../FunPublic/ts3.h 

unix {
    target.path = /usr/lib
    INSTALLS  = target
}

INCLUDEPATH  = /usr/local/cuda/include/

QMAKE_LFLAGS  = -shared
QMAKE_LFLAGS  = -L$$PWD/../../Bin/Debug/

QMAKE_LFLAGS  = -L$$PWD/../../../../ThirdPartyLib/openrave-0.9/lib
QMAKE_LFLAGS  = -Wl,-rpath=../../../../ThirdPartyLib/openrave-0.9/lib/


#如果要添加链接库,只需要加载头文件路径和动态库路径即可
# INCLUDEPATH  = /usr/local/cuda/include/ #相对路径是相对工程文件pro的路径
# QMAKE_LFLAGS  = -L$$PWD/../../../../ThirdPartyLib/openrave-0.9/lib #相对路径是相对工程文件pro的路径 编译时静态链接
# QMAKE_LFLAGS  = -Wl,-rpath=../../../../ThirdPartyLib/openrave-0.9/lib/ #相对路径是相对工作路径 运行时动态链接
# QMAKE_LFLAGS  = -Wl,-rpath=\$$ORIGIN/jsoncpp #相对路径是相对so库路径 运行时动态链接
qmake实例
代码语言:javascript复制
SOURCES = hello.cpp main.cpp
HEADERS = hello.h
CONFIG  = qt warn_on release

生成makefile (makefile是根据.pro文件参数生成的): qmake -o Makefile hello.pro qmake -t vcapp -o hello.dsp hello.pro 可以使用qmake -h查看具体的说明

qmake生成makefile

调试经验

  • 在linux平台下可以用ldd命令查看so库所依赖的其他so库,readelf -d libxxx.so | grep rpath查看xxx.so配置的依赖库的链接路径
  • qt如果勾选编译的shadow路径,那么生成的系列文件将不按照pro文件生成,而是生成在shadow路径

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144239.html原文链接:https://javaforall.cn

0 人点赞