#global defaults isEmpty(QMAKE_MOC) { contains(QMAKE_HOST.os,Windows):QMAKE_MOC = $$[QT_INSTALL_BINS]\moc.exe else:QMAKE_MOC = $$[QT_INSTALL_BINS]/moc } isEmpty(MOC_DIR):MOC_DIR = . isEmpty(QMAKE_H_MOD_MOC):QMAKE_H_MOD_MOC = moc_ isEmpty(QMAKE_EXT_CPP_MOC):QMAKE_EXT_CPP_MOC = .moc # On Windows, put the includes into a .inc file which moc will read, if the project # has too many includes. We do this to overcome a command-line limit on Win < XP INCLUDETEMP= WIN_INCLUDETEMP= win32:count($$list($$INCPATH), 40, >) { INCLUDETEMP = $$MOC_DIR/mocinclude.tmp # Remove any existing mocinclude.tmp when qmake runs WIN_INCLUDETEMP=$$INCLUDETEMP WIN_INCLUDETEMP~=s,/,\,g system($$QMAKE_DEL_FILE $$WIN_INCLUDETEMP > NUL 2>&1) EOC = $$escape_expand(\n\t) if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) { # the VCPROJ generator will replace the \r\h with the coded \r\n: # No other generator understands the \h if(win32-msvc.net|win32-msvc2*|wince*msvc*): EOC = $$escape_expand(\r\h) else: EOC = $$escape_expand(\\)$$escape_expand(\n\t) } unset(INCFILELIST) RET = for(incfile, $$list($$INCPATH)) { INCFILELIST = -I$$incfile isEmpty(RET): RET += @echo $$INCFILELIST> $$WIN_INCLUDETEMP $$EOC else: RET += @echo $$INCFILELIST>> $$WIN_INCLUDETEMP $$EOC } !isEmpty(INCFILELIST):RET += @echo $$INCFILELIST>> $$WIN_INCLUDETEMP $$EOC build_pass|isEmpty(BUILDS) { mocinclude.target = $$INCLUDETEMP mocinclude.commands = $$RET QMAKE_EXTRA_TARGETS += mocinclude } } defineReplace(mocCmd) { !isEmpty(WIN_INCLUDETEMP) { RET = if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) { RET += $$mocinclude.commands } RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$1 -o $$2 return($$RET) } return($$QMAKE_MOC $(DEFINES) $(INCPATH) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$1 -o $$2) } #moc headers moc_header.CONFIG = moc_verify moc_header.dependency_type = TYPE_C moc_header.commands = ${QMAKE_FUNC_mocCmd} moc_header.output = $$MOC_DIR/$${QMAKE_H_MOD_MOC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)} moc_header.input = HEADERS moc_header.variable_out = SOURCES moc_header.name = MOC ${QMAKE_FILE_IN} !isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP silent:moc_header.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_header.commands QMAKE_EXTRA_COMPILERS += moc_header INCREDIBUILD_XGE += moc_header #moc sources moc_source.CONFIG = no_link moc_verify moc_source.dependency_type = TYPE_C moc_source.commands = ${QMAKE_FUNC_mocCmd} moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC} moc_source.input = SOURCES OBJECTIVE_SOURCES moc_source.name = MOC ${QMAKE_FILE_IN} !isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands QMAKE_EXTRA_COMPILERS += moc_source INCREDIBUILD_XGE += moc_source #make sure we can include these files moc_dir_short = $$MOC_DIR contains(QMAKE_HOST.os,Windows):moc_dir_short ~= s,^.:,/, contains(moc_dir_short, ^[/\\\\].*):INCLUDEPATH += $$MOC_DIR else:INCLUDEPATH += $$OUT_PWD/$$MOC_DIR # Backwards compatibility: Make shadow builds with default MOC_DIR work # if the user did not add the source dir explicitly. equals(MOC_DIR, .) { CONFIG -= include_source_dir CONFIG = include_source_dir $$CONFIG } #auto depend on moc unix:!no_mocdepend { moc_source.depends += $$first(QMAKE_MOC) moc_header.depends += $$first(QMAKE_MOC) !contains(TARGET, moc) { #auto build moc isEmpty(QMAKE_MOC_SRC):QMAKE_MOC_SRC = "$(QTDIR)/src/tools/moc" make_moc.target = $$first(QMAKE_MOC) make_moc.commands = (cd $$QMAKE_MOC_SRC && $(MAKE)) QMAKE_EXTRA_TARGETS += make_moc } } #generate a mocclean build_pass|isEmpty(BUILDS):mocclean.depends = compiler_moc_header_clean compiler_moc_source_clean else:mocclean.CONFIG += recursive QMAKE_EXTRA_TARGETS += mocclean #generate a mocables build_pass|isEmpty(BUILDS):mocables.depends = compiler_moc_header_make_all compiler_moc_source_make_all else:mocables.CONFIG += recursive QMAKE_EXTRA_TARGETS += mocables