qtPrepareTool(QMAKE_RCC, rcc, _DEP) isEmpty(RCC_DIR):RCC_DIR = . isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc !contains(QMAKE_RESOURCE_FLAGS, -root):!isEmpty(QMAKE_RESOURCE_ROOT):QMAKE_RESOURCE_FLAGS += -root $$QMAKE_RESOURCE_ROOT !contains(QMAKE_RESOURCE_FLAGS, -name): QMAKE_RESOURCE_FLAGS += -name ${QMAKE_FILE_BASE} # http://www.w3.org/TR/xml/#syntax defineReplace(xml_escape) { 1 ~= s,&,&, 1 ~= s,\',', 1 ~= s,\",", 1 ~= s,<,<, 1 ~= s,>,>, return($$1) } RESOURCES += qmake_immediate for(resource, RESOURCES) { # Regular case of user qrc file contains(resource, ".*\\.qrc$"): \ next() # Fallback for stand-alone files/directories !defined($${resource}.files, var) { !equals(resource, qmake_immediate) { !exists($$absolute_path($$resource, $$_PRO_FILE_PWD_)): \ warning("Failure to find: $$resource") qmake_immediate.files += $$resource } RESOURCES -= $$resource next() } resource_file = $$absolute_path($$RCC_DIR/qmake_$${resource}.qrc, $$OUT_PWD) isEmpty(BUILDS)|build_pass { # Collection of files, generate qrc file prefix = $$eval($${resource}.prefix) isEmpty(prefix): \ prefix = "/" resource_file_content = \ "" \ "" abs_base = $$absolute_path($$eval($${resource}.base), $$_PRO_FILE_PWD_) for(file, $${resource}.files) { abs_path = $$absolute_path($$file, $$_PRO_FILE_PWD_) files = $$files($$abs_path/*, true) isEmpty(files): \ files = $$abs_path for (file, files) { exists($$file/*): next() # exclude directories alias = $$relative_path($$file, $$abs_base) resource_file_content += \ "$$xml_escape($$file)" } } resource_file_content += \ "" \ "" !write_file($$resource_file, resource_file_content): \ error() } RESOURCES -= $$resource RESOURCES += $$resource_file } !isEmpty(RESOURCES):contains(TEMPLATE, .*lib):plugin:static { resource_init_function = $$lower($$basename(TARGET))_plugin_resource_init DEFINES += "QT_PLUGIN_RESOURCE_INIT_FUNCTION=$$resource_init_function" RESOURCE_INIT_CPP = $$OUT_PWD/$$lower($$basename(TARGET))_plugin_resources.cpp GENERATED_SOURCES += $$RESOURCE_INIT_CPP QMAKE_DISTCLEAN += $$RESOURCE_INIT_CPP isEmpty(BUILDS)|build_pass { RESOURCE_INIT_CONT = \ "// This file is autogenerated by qmake. It contains a function that" \ "// references all resources the plugin includes and the function is" \ "// referenced by Qt_(MOC_)EXPORT_PLUGIN to ensure the inclusion in" \ "// the statically linked plugin." \ "$${LITERAL_HASH}include " \ "void $${resource_init_function}() " \ "{" \ for (resource, RESOURCES) { resource_name = $$section($$list($$basename(resource)), ., 0, 0) resource_name = $$replace(resource_name, [^a-zA-Z0-9_], _) RESOURCE_INIT_CONT += " Q_INIT_RESOURCE($$resource_name);" } RESOURCE_INIT_CONT += \ "}" write_file($$RESOURCE_INIT_CPP, RESOURCE_INIT_CONT)|error() } } rcc.input = RESOURCES rcc.name = RCC ${QMAKE_FILE_IN} rcc.depend_command = $$QMAKE_RCC_DEP -list $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} rcc.CONFIG += add_inputs_as_makefile_deps dep_lines !resources_big|ltcg|macx-xcode|contains(TEMPLATE, "vc.*") { rcc.output = $$RCC_DIR/$${first(QMAKE_MOD_RCC)}_${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)} rcc.commands = $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} rcc.variable_out = SOURCES } else { isEmpty(RCC_CXX):RCC_CXX = $$QMAKE_CXX $(CXXFLAGS) RCC_OUT_BASE = $$RCC_DIR/$${first(QMAKE_MOD_RCC)}_${QMAKE_FILE_BASE} RCC_CPP = $$RCC_OUT_BASE$${first(QMAKE_EXT_CPP)} RCC_TMP = $${RCC_OUT_BASE}.tmp$${first(QMAKE_EXT_OBJ)} RCC_OBJ = $$RCC_OUT_BASE$${first(QMAKE_EXT_OBJ)} msvc: RCC_CXX_O_FLAG = "-Fo" else: RCC_CXX_O_FLAG = "-o " rcc.output = $$RCC_OBJ rcc.commands = \ $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -pass 1 -o $$RCC_CPP && \ $$RCC_CXX -c $$RCC_CPP $$RCC_CXX_O_FLAG$$RCC_TMP && \ $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -pass 2 -temp $$RCC_TMP -o ${QMAKE_FILE_OUT} rcc.clean += $$RCC_CPP $$RCC_TMP } rcc.depends += $$QMAKE_RCC_EXE silent:rcc.commands = @echo rcc ${QMAKE_FILE_IN} && $$rcc.commands else:rcc.commands ~= s/&&/$$escape_expand(\\n\\t)/g QMAKE_EXTRA_COMPILERS += rcc