【问题标题】:QMake - pass variable to child projectsQMake - 将变量传递给子项目
【发布时间】:2019-01-10 18:44:22
【问题描述】:

我有一个包含这些项目文件的 qmake 项目:

. parent1.pro
. parent2.pro  
. child_common.pro

parent1 和 parent2 都是子目录项目,并且有 child_common 作为子目录。

我有没有办法定义一个可供 child_common 使用的变量,该变量根据孩子被哪个父母使用而具有不同的值?

例如:如果我正在编译 parent1,child_common 应该有一个变量 MY_VAR=A。如果我正在编译 parent2 它应该有 MY_VAR=B

【问题讨论】:

    标签: qt qmake


    【解决方案1】:

    好吧,事实上事情不是应该这样做的(因为qmake 永远不允许将其变量传递给SUBDIRS 子项目),因此您最终可能会拥有两个独立的child_common 实例。但是,如果您的所有项目都属于同一个目录子树,您可以通过以下方式使用 qmake 的缓存文件。

    首先,在公共根子目录中创建一个空缓存文件:touch .qmake.cache(或.qmake.stash,或.qmake.super)。然后将以下内容添加到您的所有“父”项目中:

    MY_VAR = A # or B
    cache(MY_VAR, set) # or "set stash", or "set super"
    

    现在MY_VAR 应该在您的任何子项目中可见,只要缓存文件存在于父目录中。但请注意,缓存内容的更改并不自动暗示(子)项目的重建。

    【讨论】:

    • 我使用 QtCreator 4.9 版,无论是否存在缓存文件,您的技巧都适用于我。我想知道是什么触发了这些文件的创建以及什么决定了它们的后缀。
    • @PatrickFromberg touch 需要确保缓存文件是在公共父目录中创建的,而不是在当前(子)项目的 $$PWD 中。当然,通常,第一次写入缓存文件时会创建一个缓存文件。后缀是预定义的,来自cache() 调用的第二个参数 - set cash/stash/super。可能同时存在所有三个缓存,因为它们具有不同的优先级。更多细节可以参考qmake源码(qmakebuiltins.cpp)。
    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 2014-09-23
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2020-09-14
    • 2019-10-31
    相关资源
    最近更新 更多