年纪大了,总容易忘记东西,记录下来以后忘记的时候可以查看
1 父工程编译子工程
TEMPLATE = subdirs
SUBDIRS += \
.... 这是子工程的工程文件目录
这样可以一次性编译N个工程.
2 编译工程
TARGET = name (模块名称)
TEMPLATE = lib (模块类型,是库还是程序) TEMPLATE = app 则是程序
#CONFIG += staticlib (静态库还是)
CONFIG -= qt (不要包含qt)
DEFINES += WEBRTC_POSIX GPAC_CONFIG_LINUX 类似宏定义吧
安装在指定的路径,这个路径也是以工程目录为当前目录参考的,把编译出来的模块放在这个目录里面,但是在工程里面要配置make参数为install才会执行这个
target.path = ../../../../../nfsroot
INSTALLS += target
hisi平台要求的
QMAKE_CFLAGS += -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv3-d16
QMAKE_CXXFLAGS += -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv3-d16
下面俩都是以工程文件的根目录为当前路径参考
INCLUDEPATH += \ (头文件路径)
SOURCES += \ (源文件)
如果只是编译一个库模块,则不用加载库文件,只需要把相应的库文件的头文件 INCLUDEPATH进来,能编译过就行了
如果是程序模块,就需要把库文件包含进去 ,最终链接成可执行的程序,所以其中如果有库依赖与别的库,则不用在库里面依赖别的库,在最终编译的程序里面导入库就好
LIBS += \
-L../../../libs/armv7-linux -lxxx \ (xxx不要包含lib直接加模块名称就好了 比如-ltest 加载的是libtest这个库)
-lpthread -lrt 这种是加载动态库, 如果加载静态库的话,可以这样 -ltest.a 或者把所有的库加载写完后,最后-static
库的加载是相对于程序的输出目录里面生成的那个makefile文件的,这个要记住
这里是配置Release版本的程序输出目录 ,编译后生成的makefile文件 编译后的目标文件以及最终的模块文件也会放那里,所以工程里面有引用库的地方,都是要参考这个目录去设置库的路径,这个和其它两个不同哦.另外,这里也配置了make install这个编译步骤吧,把最终生成的文件安装在我们在工程里面指定的目录.
我的个人理解,qt工程文件里面配置编译脚本最后还是要生成真正的makefile编译脚本,qt的工程只是辅助生成makefile文件的中间过程,在编译本模块的时候的include和source都是参考工程目录,而真正链接库的时候却是参考makefile文件的目录去链接,最终在makefile当前目录输出真正的模块文件,这是我个人的理解,没有百分百的把握,希望读者及时指正.
总结一下涉及到的三个路径, 1 inluce source路径,都是相对于工程目录的; 2 install也是相对于工程目录的3 库是相对于makefile文件目录的,也就是在工程里面配置程序的那个输出目录,如上图所示的.
基本上qt编译的大概流程就在这里了,可能还有细节的地方各位自行补充