【问题标题】:Detecting modified files during qmake在 qmake 期间检测修改的文件
【发布时间】:2016-03-03 10:06:30
【问题描述】:

qt 如何检测是否需要构建,例如如果源文件或资源文件 (.qrc) 在上次构建后被修改?每个文件都有一个标志吗? 我真正想做的是,通过将其添加到.pro 文件来发送用于资源编译的系统命令:

system(rcc -binary -no-compress resource.qrc -o resource.rcc)

而且我只想在最后一次 qmake 之后修改 resource.qrc 文件时这样做。这可能吗?如何实现?

最终版本应该是:

if(RESOURCE_MODIFIED) {
   COMPILE RESOURCE
}

【问题讨论】:

  • Qt 和 qmake 在这方面没有任何作用。构建系统可以。通常,qmake 用于生成 makefile。 makefile 列出了目标及其依赖项。你需要做的是在你的项目文件中添加一个新的target,而不是系统调用。
  • 能否提供一个添加新目标的代码示例?我认为所有必需的信息都在我原来的问题下的系统调用中。
  • 我认为您需要查看 qmake 文档。对于它的价值,is 记录在案 :)

标签: c++ qt build makefile qmake


【解决方案1】:

正如另一个discussion所回答的那样,完整的正确答案是以下代码:

mytarget.target = resource.rcc
mytarget.commands = rcc -binary -no-compress resource.qrc -o resource.rcc
mytarget.depends = resource.qrc

QMAKE_EXTRA_TARGETS += mytarget
PRE_TARGETDEPS += resource.rcc

这种方式只有在修改.qrc文件并且在编译应用程序时自动执行make时才会重新构建自定义目标。

【讨论】:

    【解决方案2】:

    QMake 创建 GNU Makefiles(假设您在默认模式下直接使用 Qt Creator 或 QMake)并且生成的 Makefile 将包含将要创建的目标列表、它们的依赖关系以及创建目标的规则。构建时,Make 检查是否有任何依赖项的文件时间戳比目标的文件时间戳更新,并将运行规则以重新创建目标。

    Kuba 已经在 cmets 中提到了它——你可能正在寻找 add a custom target

    mytarget.target = resource.rcc
    mytarget.commands = rcc -binary -no-compress resource.qrc -o resource.rcc
    mytarget.depends = resource.qrc
    
    QMAKE_EXTRA_TARGETS += mytarget
    

    【讨论】:

    • 在您提供的链接中,它是关于何时生成 .cpp 文件的。但是,就我而言,我根本没有任何 .cpp 文件。我只有 .qrc 和 .rcc 文件。
    • @OnurA,对不起,我看错了。库巴在 cmets 中基本上已经回答了。我已经更新了该部分的链接和一个示例,希望可以让您了解去哪里。
    • 当我运行 qmake 或构建项目时它不起作用。但是,当我在构建目录中运行“make resource.rcc”时,它会构建文件。这是为什么呢?如何自动制作目标?
    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多