【问题标题】:qmake not generating binary resource filesqmake 不生成二进制资源文件
【发布时间】:2012-09-12 01:43:56
【问题描述】:

规格:Qt Creator 2.5.1、Qt 4.7.4(32 位)

我从Qt documentation 了解到,在 Qt 的 .pro 文件中包含资源 (.qrc) 是让 qmake 生成正确的 qrc_*.cpp 文件所需的全部内容。我的项目似乎并非如此。运行 qmake 时,会创建 make 文件,并且有对我在 compiler_rcc_clean 下寻找的 qrc_ 文件的引用,只是不在构建链中。

[更新] 在 cmets 的建议下,qmake 生成的 makefile 直接使用 NMAKE 进行了测试。创建了正确的 qrc_filter_ao.cpp 文件。但是,当我从 Qt Creator 构建时,IDE 仍然无法正确生成此文件。

.pro:

include (../../shared.pri)

TARGET = filter_ao
QT += opengl

HEADERS += ./filter_ao.h
SOURCES += ./filter_ao.cpp

RESOURCES += \
    filter_ao.qrc

shared.pri

include (./general.pri)
VCGDIR = ../$$VCGDIR
TEMPLATE      = lib
CONFIG       += plugin
CONFIG       += resources
QT += opengl
QT += xml
QT += xmlpatterns
QT += script

win32-msvc2008:  LIBS += ../../distrib/common.lib
win32-msvc2008:DEFINES += GLEW_STATIC _USE_MATH_DEFINES

INCLUDEPATH  *= ../.. $$VCGDIR ../$$GLEWDIR/include
DEPENDPATH += ../.. $$VCGDIR

win32-msvc2008:DEFINES  += _CRT_SECURE_NO_DEPRECATE
CONFIG(release,debug | release){
  # Uncomment the following line to disable assert in mingw
  #DEFINES += NDEBUG
}

DESTDIR       = ../../distrib/plugins
contains(TEMPLATE,lib) {
  CONFIG(debug, debug|release) {
     unix:TARGET = $$member(TARGET, 0)_debug
     else:TARGET = $$member(TARGET, 0)d
  }
}
win32-msvc2008: RCC_DIR = $(ConfigurationName)

general.pri

 VCGDIR = ../../../vcglib
 GLEWDIR = ../external/glew-1.7.0
 win32:DEFINES += NOMINMAX

【问题讨论】:

  • 我认为问题出在这一行:win32-msvc2008: RCC_DIR = $(ConfigurationName) 尝试./tmp,并确保不存在该问题。变量的值应该使用双 $ 符号来接收。不是一个。此外,不同构建配置中的资源不应有所不同。
  • @Pie_Jesu 我认为你是对的。 RCC_DIR 似乎是问题所在。请参阅下面的答案。
  • @Pie_Jesu 我什至没有看到这条评论,我很抱歉。希望我在 2 天前解决了我的问题。

标签: qt makefile qt-creator qmake


【解决方案1】:

我认为@Pie_Jesu 是正确的。我已经使用来自 OP 的文件建立了一个目录结构,并将 .pro 文件导入 QtCreator。由于我使用的是 VS Express 2010,因此我已从设置 RCC_DIR 的行中删除了“win32-msvc2008:”前缀。 结果是我收到一条消息,例如“无法打开 \qrc_filter_ao.cpp 进行写入:访问被拒绝”,并且没有创建 qrc_file。 然后我将该行设置为 /TEMP:

RCC_DIR = /TEMP

结果是我在 \TEMP 下找到了 qrc_ 文件。

【讨论】:

    【解决方案2】:

    您是否尝试过使用更简单的 .pro 文件?例如,以下对我有用(在 Linux 上,当前没有可用的 MSVC 环境):

    TEMPLATE = lib
    CONFIG       += plugin
    CONFIG       += resources
    QT += opengl
    QT += xml
    QT += xmlpatterns
    QT += script
    
    TARGET = filter_ao
    QT += opengl
    
    RESOURCES += \
        filter_ao.qrc
    

    确保构建的输出包含对 $QTDIR/rcc 的调用,例如

    /usr/bin/rcc -name filter_ao filter_ao.qrc -o qrc_filter_ao.cpp
    

    【讨论】:

    • 没有这样的运气,至少不像我希望的那样。这是makefile 我可以看到 rcc 调用,但它仍然列在 compiler_rcc_clean 下,并且 qrc 文件似乎没有生成。快速搜索整个子目录以确保。
    • 请注意,compiler_rcc_clean 只调用 DEL 命令。 rcc 的相关目标在第 132 行 (release\qrc_filter_ao.cpp: filter_ao.qrc...) 应该在第 136 行调用 rcc。
    • 我的理解是,特定目标下的所有行,例如 compiler_rcc_clean,都是该目标的一部分?所以对我来说,直到第 138 行的所有内容都是 compiler_rcc_clean 的一部分。
    • 不,不完全是。第 132 行开始了一个新的目标 - 一个目标从第 0 列开始,并以冒号结尾,可选地后跟一个依赖项列表(除非它是一个虚假的目标,如 dist:)。相关的命令以制表符开头。你甚至可以直接调用这个目标,比如make release\qrc_filter_ao.cpp(我假设你正在使用nmake?我目前只有一个mingw环境可用)。至少你可以检查一下这是否有效。
    • +1 表示良好,看来我的问题与 Qt Creator 相关,而不是 makefile 本身。我想标记为答案,但我原来的问题仍然存在,Qt Creator 没有构建 qrc 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多