QT pro自动化编译

原文链接http://tcspecial.iteye.com/blog/2034537



   QT的pro文件为工程自动化跨平台编译提供了便利,可以直接通过qmake生成Makefile文件,windows执行nmake,linux下执行make即可完成整个项目的编译

 

1. 项目列表pro

Pro代码 
  1. TEMPLAET = subdirs   
  2.   
  3. # 子项目列表,默认*.pro与工程名一致  
  4. SUBDIRS = auth_interface \  
  5.                   alm_jna_dll   \  
  6.                   auth_service \  
  7.                   sdbview \  
  8.                   stat_service  \  
  9.                   dualswitch  
  10.               
  11. # 当*.pro与工程名不一致,通过file属性指定            
  12. data_engine.file = data_engine/data_engine_qt4.pro  
  13. auth_interface.file = auth_interface/auth_interface_qt4.pro  

 

2. pro详细配置 

   2.1 配置文件生成目录

   编译过程中会产生moc_*.cpp(moc文件),ui_*.h(ui编译文件),*.obj等中间文件,默认是生成在当前目录,可以通过MOC_DIR,OBJECTS_DIR,UI_HEADERS_DIR,RCC_DIR属性指定

  

   2.2 配置生成后事件

   QMAKE_POST_LINK可以指定生成后事件: QMAKE_POST_LINK += copy debug\\*.exe ..\dist. 当有多个QMAKE_POST_LINK时你会发现拷贝会出错,打开VS10发现,多个拷贝命令没有被分隔开

   解决方案: 在每条命令后加上$$escape_expand(\\n\\t) 即可

   QMAKE_POST_LINK += $$quote(copy /y $$MYDIR\\*.lib $$AIMDIR $$escape_expand(\\n\\t))

   QMAKE_POST_LINK += $$quote(copy /y $$MYDIR\\*.dll $$AIMDIR $$escape_expand(\\n\\t))

 

   但是这种方式只能被VS10识别,vc6下无法正常工作, 通用解决方案: 多条拷贝命令以&&连接即可

 

   详见如下pro:

Pro代码
  1. TEMPLATE = lib  
  2.   
  3. INCLUDEPATH +=.  
  4. DEPENDPATH += .  
  5.   
  6. HEADERS +=  
  7. SORUCES += main.cpp  
  8.   
  9. MYDIR = ..\\dist\\debug         # 变量MYDIR指定目标文件生成目录  
  10. DESTDIR = $$MYDIR               # 目标文件目录   
  11. MOC_DIR = $$MYDIR               # moc_*.cpp生成目录   
  12. OBJECTS_DIR = $$MYDIR           # *.obj文件生成目录  
  13. RCC_DIR = $$MYDIR               # 资源文件qrc_*.cpp生成目录   
  14. UI_HEADERS_DIR = $$MYDIR   # UI文件(ui_*.h) 生成目录   
  15.       
  16. win32{  
  17.     DEFINES  += WIN32               # 对于vc6下编译,nmake不会主动包含WIN32系统宏,需要手动定义  
  18.         QMAKE_LFLAGS += /stack:0x800000   // 设置堆栈空间大小  
  19.     QMAKE_POST_LINK = copy /y $$MYDIR\\*.lib $(QTDIR)\\lib && copy /y $$MYDIR\\*.dll $(QTDIR)\\bin  #拷贝多个文件,以&&连接  
  20. }else{    
  21.     #linux平台  
  22.     QMAKE_POST_LINK = cp -rf $$MYDIR/*.so* $(QTDIR)/lib  
  23. }  

 

   2.3 条件编译

   如何在pro定义很多选项开关,进行选择性编译? qmake提供很多功能强大的内置函数和变量,为动态编译项目提供了便利

 

   方式一: contains()

   contains 函数用于检测变量是否包括该值 

Pro代码   收藏代码
  1. DEFINES += USE_QT4  
  2.   
  3. #判断DEFINES是否包含USE_QT4宏, 注: contains() 与 { 必须在同一行,否则出错  
  4. contains(DEFINES,USE_QT4){  
  5.     LIBS += -lmydll_qt4  
  6. }else{  
  7.     LIBS += -lmydll  
  8. }  

 

   方式二: CONFIG 

   CONFIG 变量用于指定工程配置和编译器选项,通常取debug,release,dll等值,也可以自定义选项值; CONFIG变量的每个选项都可以用于条件判断 

Pro代码 
  1. CONFIG += qt4  
  2.   
  3. qt4{  
  4. LIBS += -lmydll_qt4  
  5. }else{  
  6. LIBS += -lmydll  
  7. }   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值