公司在跨平台编译的时候,采用的方式是VS转QT工程,会生成pro文件和pri文件,如果同时生成的话,一般当前工程的pro文件中包含了工程的pri文件。但是此pro和pri文件都是照着Windows的环境变量和VS工程的配置来的,pro或者pri包含的头文件路径(附加包含目录),库路径都还是VS中设置的,例如库路径是win64/debug/等。公司为了添加库的便利,写了C70.pri,x64pri(这两个路径均在\zhrepo\zhcode\qt\script\)。mount-zhrepo.sh这个要在zhrepo目录下执行,因为pwd目录然后输出了ZHREPO_DIR,注意因为有 export ZHREPO,所以这个sh脚本只能在当前shell执行,采用source mount-zhrepo.sh执行。然后在此终端cd到pro和pri都在的文件夹进行qmake生成Makefile。注意里面可能需要修改g++版本。
各个文件的功能:
工程.pro:include几个pri文件,c70.pri,工程.pri等。
工程.pri:库的头文件路径,库的路径及名称,自己添加的头文件,源文件等。特别要注意的是库的头文件和库的路径及名称,一般使用mount-zhrepo.sh中export的ZHREPO_DIR来代替前面的路径。库路径由x64.pri生成了全路径。
c70.pri:include了x64.pri,加了-g可调试,还做了-O1,O2,O3的优化。
x64.pri:生成了直指到Linux对应版本库的路径ZHCODE_LIB_DIR。根据ZHREPO_DIR和unmae -r和uname -m生成的版本号拼接成了全路径。
mount-zhrepo.sh:在zhrepo文件夹所在的路径执行此脚本,因为是将此路径pwd之后赋给了ZHREPO_DIR并export。还加了mount -t vboxsf ZHREPO ,这里将虚拟机配置里设置的共享文件夹先挂载,我已经挂载了就没有管。
各个文件中要改哪些地方:
工程.pro:
加一行include($(ZHREPO_DIR)/zhcode/qt/script/C70.pri),C70pri中包含了X64.pri,这两个里面内容不用改,保证uname -r uname -m生成的路径名正确即可。
INCLUDEPATH += 和LIBS +=可以移到pri文件中。同时注意INCLUDEPATH +=这个路径下的:
包含库的头文件时,原本的ZHCODE_DIR注意要改成ZHREPO_DIR,因为Linux中mount-zhrepo.sh中,export的是ZHREPO_DIR,但是Windows下配的环境变量的名字是ZHCODE_DIR,VS配置附加包含目录时也是按照这个环境变量去配的。
LIBS +=注意:
改成上图格式,第一行符号不要错,第二行-ldl -W1 --start-group和最后一行的end--group要加,可以避免库的链接顺序造成的错误。
工程.pri:
从工程.pro中移进来的东西,改这两个INCLUDEPATH += 和LIBS +=中的东西
Makefile:
改一下生成目标文件的路径,g++指定 -std=c++11
所以总体执行流程是
1、VS中create pro文件和pri文件。按照上述要求修改pro和pri文件
2、在zhrepo的同级文件夹采用source mount-zhrepo.sh执行
3、在此终端cd到pro和pri所在的文件夹进行qmake,生成Makefile。注意里面可能需要修改Makefile指定g++版本和生成文件的路径。
4、make。