分享

qt下的跨目录多工程编译

 Harrison.Ding 2012-07-05

这里要编译的工程包含一个库和一个可执行文件。可执行文件依赖于库,所以要先编译库,编译后库放在lib目录里面,可执行文件放在bin目录里面。

目录结构如下:

  1. .  
  2. ├── app  
  3. │   ├── app.pro  
  4. │   ├── appwindow.cpp  
  5. │   ├── appwindow.h  
  6. │   └── main.cpp  
  7. ├── bin  
  8. ├── complex.pro  
  9. ├── include  
  10. │   └── base.h  
  11. ├── lib  
  12. └── src  
  13.     ├── base.cpp  
  14.     └── src.pro  

全局的工程文件complex.pro在工程根目录下,内容如下:

  1. TEMPLATE = subdirs  
  2. SUBDIRS = src app  
  3. CONFIG += ordered  

subdirs模板表示要编译多个子目录中的工程。CONFIG选项要求各个子工程按顺序编译,子目录的编译顺序在SUBDIRS中指明。

库的工程文件在src目录中,名为src.pro, 内容如下:

  1. TARGET = base  
  2. VERSION = 0.1.0  
  3. CONFIG += static  
  4.   
  5. DESTDIR = ../lib  
  6.   
  7. INCLUDEPATH += ../include  
  8. DEPENDPATH += . ../include  
  9.   
  10. SOURCES += base.cpp  
  11. HEADERS += base.h  

TARGET表示编译后的库名字为base,CONFIG += static表示编译后的库是静态库。DESTDIR设置编译后的库的位置。

库编译结束后就是可执行文件编译了,工程文件在app目录下的app.pro,内容如下:

  1. TEMPLATE = app  
  2. TARGET = app  
  3. DESTDIR = ../bin  
  4.   
  5. INCLUDEPATH += . ../include  
  6. DEPENDPATH += .  
  7.   
  8. LIBS += -L../lib -lbase  
  9.   
  10. SOURCES += appwindow.cpp main.cpp  
  11. HEADERS += appwindow.h  

如果要编译多个库,多个可执行文件,或者多级目录工程,可以参照这个例子写多个pro文件,递归而已,不是什么难事。


Reference:

Johan Thelin. Foundations of Qt Development. Apress 2007




多工程该怎么组织

多工程该如何组织
现在我有一个用 vs2008 创建的项目 solution,内含三个工程,分别为
libABC
helloworld
test
其中 libABC 工程需要编译出一个动态库,win 下是 .dll,linux 下是 .mo
helloworld 和 test 是两个可编译出 .exe 文件的工程,并且都依赖于 libABC 的动态库。
在 vs 中,我可以设置依赖关系,并且可以选择 helloworld 或者 test 作为启动项目。

问题,在 qt 中:
1.qt 是否有 vs 中工程的概念?
2.不管有没有,我该如何组织这个“工程”,使得用起来如 vs 一样方便?


------解决方案--------------------------------------------------------
1. 在QtCreator中没有类似solution功能,但可以同时打开多个工程,并可以设置缺省工程;
2.  
可以同时打开libABC,helloword,test三个工程;
在helloworld和test工程中设置libABC工程动态库的输出文件,即可 
------解决方案--------------------------------------------------------
在你工程的顶级目录里放置一个project.pro,内容是:
TEMPLATE = subdirs
SUBDIRS = libfoo foo

然后添加一个libfoo目录和一个foo目录,里面分别放置libfoo.pro和foo.pro文件,内容是:
# libfoo.pro
TEMPLATE = lib
# ...

# foo.pro
TEMPLATE = app
# ... 
------解决方案--------------------------------------------------------
楼上的正解

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多