有时候我们用subdirs来管理多个项目。
加入这个项目可以通过某个变量来构建不同版本的程序,那么就会存在一个配置文件,然后改这个文件就生成不同版本。例如:
Config.pri这样写:
# 定义当前项目标识 APP_CONFIG_NAME = F*ckPelosi 又或者 APP_CONFIG_NAME = F*ckUsa
在实际项目myApp.pro中包含这个pri就可以使用
include (./Config.pri)
那我不想更改这个Config.pri怎么办,我想把一个变量传给pri,因为我用同一个subdirs编译的的话,每次更改APP_CONFIG_NAME都要重新编译,不想花这个时间。
这时候也是有解决方法的,典型的多工程管理 multiProj.pro 可以这样写:
TEMPLATE = subdirs SUBIDRS = ../proj1 ../porj2
目录架构:
proj1 proj2 multiProj multiProj.pro
如果打开multiPorj.pro编译,那么每次都会编译到同一个目录,例如multiProj/build,我想不同的配置编译到不同目录。那么可以这样,新建多个multiProj目录:
multiProjFuckPelosi multiProj.pro multiProjFuckUsa multiProj.pro
这样中间文件一般会编译到:multiProjFuckPelosi/build和multiProjFuckUsa/build,只要在更改multiProj.pro一下:
DEFINES += APP_CONFIG_NAME_PRE=F*ckPelosi
然后在Config.pri直接用即可:
APP_CONFIG_NAME = $$APP_CONFIG_NAME_PRE
这样,不用的构建目录自己定义不同的变量传到Config.pri就可以实现不同的配置。
还有个情况,cmake一般都支持生成config.h头文件,qmake也可以,只要指定:
QMAKE_SUBSTITUTES += myconfig.h.in
然后就会在build目录生成myconfig.h了。
这是qmake生成h文件给代码用,前面说的是变量给qmake使用,顺序相反。
还有个比较傻的方案就是用 cat() 函数读取文件。