I had the same problem, solved it by making a new compiler that uses the generated header file as input and runs moc on it to generate the missing source file. From my .pro: dbc2cpp_canbus_h.name = Generating canbus.h from DBC file. dbc2cpp_canbus_h.CONFIG += combine dbc2cpp_canbus_h.input = "DBC_A_C" dbc2cpp_canbus_h.output = canbus.h dbc2cpp_canbus_h.commands = bash -c 'dbc2cpp --target CANBUS_H CLUSTER <($${DBC_A_GIT}) <($${DBC_C_GIT})' dbc2cpp_canbus_h.variable_out = HEADERS QMAKE_EXTRA_COMPILERS += dbc2cpp_canbus_h CANBUS_H = canbus.h new_moc.commands = moc $(DEFINES) $(INCPATH) canbus.h -o ${QMAKE_FILE_OUT} new_moc.input = "CANBUS_H" new_moc.output = moc_canbus.cpp new_moc.variable_out = SOURCES QMAKE_EXTRA_COMPILERS += new_moc