ninsun的个人主页

http://www.qtcn.org/bbs/u/96534  [收藏] [复制]

ninsun

  • 6

    关注

  • 9

    粉丝

  • 61

    访客

  • 等级:侠客
  • 总积分:244
  • 男,1987-04-29

最后登录:2017-07-10

更多资料

日志

让你的源代码目录“干净”,让你的输出目录“漂亮”——更加完善的Qt跨平台编译的通用pro额外配置

2012-01-29 10:02
真心是因为太无聊了, 我才会去研究如何才能让代码在linux平台和win平台可以一次性的编译就可直接拿来发布——并且不需要来回复制文件,或者修改文件名之类的……
以下就是我的研究成果了……

使用前提:使用QtCreator或命令行编译,不使用shadow-build,并且是一层目录结构的subdir工程——多层次的subdir工程还未去研究过……
因为我会将生成的程序,库都放到一个名字叫做output的目录之中,源代码目录唯一会有所变化的就是多出了几个makefile文件,所以可以说源码目录还是很“干净”的。
output目录下面,bin目录就是最终可以直接拿来发布的程序——当然,对于不同的编译环境以及运行环境,你需要额外的将运行时库还有启动脚本(linux下的万能启动脚本,由qt帮助文档提供,win则不需要)放入bin目录下——毕竟我还不知道如何去检测一个程序需要哪些依赖库以及自动将这些依赖库复制到bin目录下的方法。
output目录下面,lib目录是放库文件的,而build是放编译中生成的临时文件的。


注意:由于win版的qtcreator的某个奇怪的bug,pro文件中使用utf8格式的中文可能导致出现奇怪的换行错误以致pro文件被破坏,对于新手来说这是灾难性的……所以不要轻易的在pro文件中添加中文注释……
所以,以下的配置我也没有写注释。我在后续会解释……

  1. CONFIG(debug, debug|release) {
      OUTPUT_DIR = $PWD/../output/debug
      message(debug: $OUTPUT_DIR)
      TARGET = $join(TARGET,,,d)
    } else {
      OUTPUT_DIR = $PWD/../output/release
      message(release: $OUTPUT_DIR)
    }

    contains(TEMPLATE, "lib") {
      DESTDIR = $OUTPUT_DIR/lib
      DLLDESTDIR = $OUTPUT_DIR/bin/ningePlugins
    } else {
      DESTDIR = $OUTPUT_DIR/bin
    }
    UI_DIR = $OUTPUT_DIR/build/ui/$TARGET
    OBJECTS_DIR = $OUTPUT_DIR/build/obj/$TARGET
    MOC_DIR = $OUTPUT_DIR/build/moc/$TARGET
    RCC_DIR = $OUTPUT_DIR/build/rcc/$TARGET

    unix:{
      target.path = $OUTPUT_DIR/bin/ningePlugins
      INSTALLS += target
    }

第1行至第8行:简单的relase和debug版本判断,决定应将文件输出至哪个目录下,以及为debug版文件附加上一个d后缀。
$PWD是当前目录——在不使用shadow-build的时候,也就是当前子工程的源码所在的目录。

第10行至15行:判断当前工程是否是库,是的话则放到一个独立的库输出目录当中,并且拷贝一份dll至指定的目录下。
第16行至第19行:设置各种编译中间文件——例如qt自动生成的cpp文件,h文件——的输出目录。
21行至23行:*nix系统下, make install 时需要拷贝的文件以及目标目录——实际上就是第10行至15行之中拷贝一份dll的工作,不过因为那里的配置在linux不起作用,所以在这里额外的加上一下。
分类:默认分类|回复:0|浏览:2987|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:04-29 06:56
©2005-2016 QTCN开发网 版权所有 Gzip disabled