大家好,又见面了,我是你们的朋友全栈君。
前言
在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