关于新版本 Creator Build 目录警告的疑问



  • 出于对目录整洁的要求, 以往我的 Build 目录是这样的:

    /.
    └── project
        ├── project.pro
        ├── src
        ├── i18n
        ├── ui_material
        ├── doc
        ├── Release
        ├── Debug // 以 Debug Build 目录为例
        │   ├── Makefile
        │   ├── project.app
        │   └── tmp
        │       ├── moc
        │       ├── obj
        │       └── ui
        └── shipping
    

    这样看起来舒适一些, 在 .pro 代码中也可以写一些脚本来完成相关资源的发布.

    但是升级 Creator 到 4.2 以后. 我得到了这样一个警告:

    warning: The build directory needs to be at the same level as the source directory.

    虽然不影响我的发布, 但是我还是比较疑惑, 这是为什么, 还请大神指教一下.



  • @MemphisWang

    Hi, Welcome devnet.

    虽然,没有这么做过的. 根据警告提示,以下只是我的猜测而已.

    warning: The build directory needs to be at the same level as the source directory

    对于正常的项目来说,

    QtPro/
    ├── XXXXXXX
    │   └── XXXXXX.pro //这里是源文件目录
    ├── bulid-XXXXXXX-Debug
    │   ├── MakeFile //此文件夹内,是bulding目录
    │   ├── debug
    │   └── release
    └── bulid-XXXXXXX-Release
    ├── MakeFile //此文件夹内,是bulding目录
    ├── debug
    └── release

    而根据你的目录, bulding目录,是被包含在了pro目录里面.

    这仅仅是我的猜测. 仅供参考.



  • @joeQ
    你好, 谢谢你的回复. 我说一下为什么我采用前面那种方案的原因吧:
    你所展示的是一个项目的正常结构, 也是默认结构. .
    但是这种方式有个问题就是会让目录显得比较凌乱, 尤其是在多个项目下:

    └── repo // 项目仓库
        ├── build-proj1-xxx-Debug
        ├── build-proj1-xxx-Release
        ├── build-proj2-xxx-Debug
        ├── build-proj2-xxx-Release
        ├── common_res // 通用资源
        ├── common_scripts // 公用脚本
        ├── proj_1
        └── proj_2
    

    固然我可以在 .gitignore 中过滤 Build 目录, 但是一旦项目数量增多, 我的仓库就显得凌乱不堪. 我的疑问不是这条警告的意义, 而是因为好奇和部分的忧虑, 想要了解 Creator 出于什么考虑不希望开发者将 Build 目录放在项目内部?



  • @MemphisWang

    我在我的破机器上面试了一下. 也许我使用的版本有些高吧.5.6.0的. 不管我怎么移动build目录, 都是没有警告的.

    其实你的问题,论坛里6年前,5个月前, 都有人遇到相同的警告. 你可以看一下.

    6年前,有的人说,是一个bug.
    5个月前,讨论好像很激烈的. 总之,讨论的很有意思. 你可以看看.讨论内容,挺逗人的.哈哈



  • @joeQ
    感谢回复, 两个传送门的内容很有意思. 大约也明白了这个问题可能无伤大雅, 我可以继续保持我现有的目录结构不会有太大的影响. 谢谢.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.