Faits :
A.
A._ et B._ sont copropriétaires, chacun pour une demie, de la parcelle n° xxx de la commune de U._, sur laquelle une demeure patricienne est érigée; l'ensemble est dénommé «Domaine...».
Le 3 octobre 2006, en qualité de maîtres de l'ouvrage, ils ont conclu avec X._ Sàrl un contrat d'entreprise générale portant sur la rénovation de la maison de maître située sur le «Domaine...»; X._ Sàrl était représentée par Y._, associé gérant avec signature individuelle, lequel s'est déclaré solidairement responsable avec la société. Les parties ont convenu d'un prix forfaitaire de 750'000 fr., qui englobait les travaux faisant l'objet d'un descriptif annexé, ainsi que divers frais et taxes.
X._ Sàrl n'a pas terminé les travaux prévus et ni réparé les malfaçons. A._ et B._ ont alors mandaté des entreprises tierces pour effectuer ces travaux.
B.
B.a. Le 18 août 2010, A._ et B._ ont déposé une requête d'expertise hors procès auprès du Juge de paix du district du Jura-Nord vaudois. L'expert M._ a établi un rapport en date du 29 septembre 2011, qu'il a complété le 27 février 2012.
B.b. A la suite de l'échec de la conciliation, A._ et B._ ont conclu, par demande du 28 septembre 2012, à ce que X._ Sàrl et Y._ leur doivent paiement, solidairement entre eux, de 169'735 fr.80, plus intérêts à 5% l'an dès le 31 août 2007. Selon les demandeurs, leur prétention se décompose comme suit (sic) :
- travaux contractuels non exécutés 96'009 fr.
- travaux de réfection 78'300 fr.
- travaux de réfection des moulures 15'000 fr.
- frais de justice et d'expertise 4'660 fr.
- remboursement des honoraires du conseil des
demandeurs dans la procédure d'expertise hors procès 4'193 fr.
Total intermédiaire 198'162 fr.
- dont à déduire la somme retenue par les demandeurs sur
le prix total des travaux 20'000 fr.
- dont à déduire la part justifiée sur les factures n°s 272
et 2922 8'003 fr.20
Total 170'158 fr.80
En cours de procédure, une expertise a été confiée à l'architecte N._, lequel a déposé son rapport le 16 avril 2015.
Par jugement du 13 juillet 2016, la Chambre patrimoniale du canton de Vaud a condamné les défendeurs, solidairement entre eux, à payer aux demandeurs, solidairement entre eux, la somme de 153'632 fr.40, avec intérêts à 5% l'an dès le 31 mars 2012. Confrontés à deux expertises contradictoires, les premiers juges ont écarté le rapport de N._, au motif que l'expert s'était fondé sur le postulat erroné selon lequel le contrat était régi par la norme SIA 118, qu'il procédait à des suppositions qui outrepassaient le rôle qui lui était dévolu et que son rapport était fouillis, peu clair, voire incompréhensible. Ils lui ont préféré le rapport de M._, sur lequel ils ont assis leurs conclusions. Ils ont considéré que les demandeurs avaient à bon droit fait appel à d'autres entreprises, après que les défendeurs eurent quitté le chantier à l'été 2007, faute de volonté réelle et sérieuse de ces derniers de terminer les travaux prévus dans le descriptif. Les défendeurs devaient dès lors rembourser aux demandeurs le montant payé par ces derniers à des entreprises tierces pour des travaux figurant dans le descriptif, mais non exécutés par les défendeurs, soit 93'009 fr. S'y ajoutaient 78'300 fr. au titre des travaux de réfection des défauts attestés par l'expertise hors procès. En revanche, le surcoût engendré par le changement des moulures était dû aux exigences du service des monuments historiques, lesquelles avaient été acceptées par les demandeurs, de sorte qu'ils ne pouvaient en réclamer le remboursement. Les premiers juges ont finalement condamné les défendeurs à rembourser aux demandeurs les frais de justice et d'expertise hors procès, ainsi que les honoraires de leur conseil pour cette procédure. Du total obtenu, soit 180'102 fr., ils ont déduit le solde dû sur le montant forfaitaire des travaux, par 20'000 fr., ainsi que le solde reconnu des factures n os 272 et 2922, par 6'469 fr.20.
Les premiers juges ont refusé toute compensation avec les travaux complémentaires non prévus dans le contrat d'entreprise, que les défendeurs prétendaient avoir effectués pour un montant de 125'827 fr. En effet, lesdits travaux n'avaient jamais fait l'objet d'un accord écrit; la simple production d'une facture finale ni datée ni signée, dont on ignorait si elle avait bien été transmise aux demandeurs, ne suffisait pas pour admettre un accord des parties sur le paiement de ces travaux complémentaires. Du reste, les défendeurs n'avaient pas informé les demandeurs d'un dépassement du prix forfaitaire, ce qu'ils étaient tenus de faire en vertu du contrat.
Par arrêt du 29 mai 2017, la Cour d'appel civile du canton de Vaud a admis partiellement l'appel formé par les défendeurs. Elle a considéré que les premiers juges avaient à tort écarté dans sa totalité le rapport d'expertise réalisé par N._. En effet, ce dernier se prononçait de manière suffisamment claire et compréhensible sur des prétentions opposées en compensation par les défendeurs, sur lesquelles l'expert hors procès M._ ne se déterminait pratiquement pas. Il s'agissait ainsi, en relation avec les travaux supplémentaires, de retenir l'expertise de N._ sur les points sur lesquels elle se révélait suffisamment probante et n'entrait pas en contradiction avec l'expertise hors procès. Or, il ressortait de cette expertise-là qu'il y avait bien eu des travaux supplémentaires, lesquels n'étaient pas compris dans le prix forfaitaire et devaient être rémunérés en sus. Tel était le cas de la création d'une terrasse fermée pour un montant de 15'052 fr. ainsi que du décrépissage, du lavage et du dressage de la façade avec des produits imposés par le service des monuments historiques - en lieu et place du simple rhabillage de façade prévu dans le descriptif des travaux - pour un montant de 26'167 fr.15. Partant, les défendeurs étaient fondés à opposer en compensation à la créance des demandeurs par 153'632 fr.40 une créance en paiement des travaux supplémentaires à hauteur de 41'219 fr.15. Les défendeurs étaient dès lors débiteurs envers les demandeurs d'un montant de 112'413 fr.25, avec intérêts à 5% l'an dès le 31 mars 2012.
C.
X._ Sàrl et Y._ interjettent un recours en matière civile. Ils concluent principalement à ce que l'arrêt du 29 mai 2017 soit réformé en ce sens qu'ils ne sont pas les débiteurs des demandeurs à raison des travaux effectués sur la base du contrat d'entreprise du 3 octobre 2006, l'action en paiement étant rejetée.
Les recourants ont demandé que l'effet suspensif soit octroyé à leur recours. A._ et B._ ont conclu au rejet de la requête d'effet suspensif. Celle-ci a été admise par ordonnance présidentielle du 12 juillet 2017.
Les intimés n'ont pas été invités à répondre au recours.

Considérant en droit :
1.
Les conditions de recevabilité du recours en matière civile sont réalisées sur le principe, notamment sous l'angle de la valeur litigieuse minimale de 30'000 fr. (<ref-law>) et du délai pour recourir (<ref-law> en lien avec l'<ref-law>). Rien ne fait obstacle à l'entrée en matière. Demeure réservé l'examen, sous l'angle de leur motivation, des griefs invoqués par les recourants.
2.
Le recours est ouvert pour violation du droit fédéral (<ref-law>). Le Tribunal fédéral applique ce droit d'office, hormis les droits fondamentaux (<ref-law>). Il doit conduire son raisonnement juridique sur la base des faits constatés dans la décision attaquée (<ref-law>). Il ne peut rectifier ou compléter les constatations de l'autorité précédente que si elles sont manifestement inexactes ou découlent d'une violation du droit au sens de l'<ref-law> (<ref-law>). "Manifestement inexactes" signifie ici "arbitraires" (<ref-ruling> consid. 1.3.1 p. 253; <ref-ruling> consid. 2.3 p. 266; <ref-ruling> consid. 2 p. 117; <ref-ruling> consid. 1.5). Encore faut-il que la correction du vice soit susceptible d'influer sur le sort de la cause (<ref-law>). La critique de l'état de fait retenu est soumise au principe strict de l'allégation énoncé par l'<ref-law> (ATF <ref-ruling> consid. 2.3 p. 266 et les références).
La partie qui entend attaquer les faits constatés par l'autorité précédente doit expliquer clairement et de manière circonstanciée en quoi ces conditions seraient réalisées (<ref-ruling> consid. 1.3.1 p. 18 et les références). Si elle souhaite obtenir un complètement de l'état de fait, elle doit aussi démontrer, par des renvois précis aux pièces du dossier, qu'elle a présenté aux autorités précédentes en conformité avec les règles de procédure les faits juridiquement pertinents à cet égard et les moyens de preuve adéquats (<ref-ruling> consid. 2 p. 90). Si la critique ne satisfait pas à ces exigences, les allégations relatives à un état de fait qui s'écarterait de celui de la décision attaquée ne pourront pas être prises en considération (<ref-ruling> consid. 1.3.1 p. 18). Les critiques de nature appellatoire, tendant simplement à une nouvelle appréciation des preuves, sont irrecevables (<ref-ruling> consid. 1.4.3 p. 254; voir aussi <ref-ruling> consid. 1.3.1 p. 253; <ref-ruling> consid. 2.3 p. 266; <ref-ruling> consid. 4.1.2 p. 62). Aucun fait nouveau ni preuve nouvelle ne peut être présenté à moins de résulter de la décision de l'autorité précédente (<ref-law>).
En matière d'appréciation des preuves, le Tribunal fédéral n'intervient, du chef de l'art. 9 Cst., que si le juge du fait n'a manifestement pas compris le sens et la portée d'un moyen de preuve, a omis sans raisons objectives de tenir compte des preuves pertinentes ou a effectué, sur la base des éléments recueillis, des déductions insoutenables (ATF <ref-ruling> consid. 2.3 p. 265; <ref-ruling> consid. 4.2). L'arbitraire ne résulte pas du seul fait qu'une autre solution serait concevable, voire même préférable (<ref-ruling> consid. 4.2).
3.
Selon les recourants, c'est à tort que les juges cantonaux se sont fondés essentiellement sur l'expertise de M._ au détriment de celle de N._, laquelle n'a trouvé grâce à leurs yeux qu'en ce qui concerne les prétentions qu'ils invoquent en compensation. Cette conclusion, qui relève de l'appréciation des preuves, doit être dénoncée par un grief d'arbitraire motivé de façon circonstanciée (cf. consid. 2 supra).
3.1. Lorsque l'autorité cantonale juge une expertise concluante et en fait sien le résultat, le Tribunal fédéral n'admet le grief d'arbitraire que si l'expert n'a pas répondu aux questions posées, si ses conclusions sont contradictoires ou si, d'une quelconque autre façon, l'expertise est entachée de défauts à ce point évidents et reconnaissables, même sans connaissances spécifiques, que le juge ne pouvait tout simplement les ignorer. Il n'appartient pas au Tribunal fédéral de vérifier si toutes les affirmations de l'expert sont exemptes d'arbitraire; sa tâche se limite bien plutôt à examiner si l'autorité intimée pouvait, sans arbitraire, se rallier au résultat de l'expertise (arrêts 4A_577/2008 du 31 mars 2009 consid. 5.1; 4P.283/2004 du 12 avril 2005 consid. 3.1, in RDAF 2005 I p. 375; 4P.263/2003 du 1er avril 2004 consid. 2.1).
Si l'autorité cantonale est confrontée à plusieurs expertises judiciaires et qu'elle se rallie aux conclusions de l'une d'elles, elle est tenue de motiver son choix. Dans un tel cas, le Tribunal fédéral n'admet le grief d'appréciation arbitraire des preuves que si cette motivation est insoutenable ou si le résultat de l'expertise qui a eu la préférence de l'autorité cantonale est arbitraire pour l'un des motifs susmentionnés (arrêt précité du 31 mars 2009 consid. 5.1; arrêts 4P.205/2003 du 22 décembre 2003 consid. 2.1; 5P.187/2001 du 29 octobre 2001 consid. 2a).
3.2.
3.2.1. En l'espèce, la cour cantonale s'est rangée à l'avis des premiers juges, selon lequel - pour tout ce qui ne concerne pas les prétentions invoquées en compensation par les défendeurs - il convient de s'en remettre à l'expertise réalisée par M._ plutôt qu'à celle établie par N._ En effet, ce dernier avait retenu à tort que la norme SIA 118 s'appliquait à la totalité du contrat litigieux. En outre, il n'appartenait pas à l'expert de poser des hypothèses - comme il s'y était essayé - à quoi s'ajoutait que son rapport était fouillis, peu clair, parfois incompréhensible et que ses réponses aux allégués manquaient d'une structure suffisante pour permettre au lecteur de comprendre son point de vue.
3.2.2. Les recourants font valoir des griefs de deux ordres à l'encontre de l'appréciation des juges cantonaux.
D'une part, ils affirment que le rapport de M._ était lacunaire. L'expert ne se serait pas prononcé sur une série de points, à savoir "les annexes A, C et D".
Sur la base de cette simple évocation et sans autre explication, la cour de céans n'est pas en mesure de discerner en quoi l'expert n'aurait - par hypothèse - pas répondu à certaines des questions qui lui étaient posées ou aurait délivré une expertise dont les conclusions étaient contradictoires ou qui était entachée de défauts évidents et reconnaissables, ce qui est seul déterminant. Par ailleurs, il est constant que l'expert M._ ne s'est pas prononcé sur les prétentions invoquées en compensation par les recourants, ce qui a conduit la cour cantonale à se référer sur ce point à l'expertise réalisée par N._. On ne sait toutefois, faute de motivation suffisante du recours à cet égard, à quoi se rapportent les annexes en question et si, dès lors, elles ressortissent à cette catégorie ou à une autre. Lorsqu'ils critiquent lapidairement le choix de l'expert M._, prétendument par les seuls maîtres de l'ouvrage, pour expliquer que son rapport ait entériné les défauts de l'ouvrage invoqués, les recourants ne vont pas jusqu'à prétendre que leur droit d'être entendu aurait été violé, question que le Tribunal fédéral ne revoit pas d'office (<ref-law>; ATF <ref-ruling> consid. 1.4 in fine). L'absence de motivation circonstanciée ôte toute portée au moyen tiré d'une hypothétique prévention de l'expert M._, argument dont il n'apparaît pas - au demeurant - qu'il ait été invoqué précédemment. Ces griefs sont donc irrecevables.
D'autre part, les recourants s'en prennent aux motifs qui ont conduit les juges cantonaux à accorder leur préférence au rapport de M._. Ils font grief à l'autorité précédente de ne pas avoir détaillé les points sur lesquels les conclusions de l'expert N._ seraient incompréhensibles. Selon eux, au contraire, ce rapport serait, "dans l'ensemble", parfaitement compréhensible. Ils en veulent pour preuve les réponses "parfaitement claires" données par "l'expert hors procès" ( recte : l'expert N._) notamment aux pages 8 à 10 de son rapport.
Il appartient aux recourants de démontrer que la motivation de la cour cantonale est insoutenable. Or, ils se contentent sur ce point d'infirmer l'appréciation des juges précédents en renvoyant la cour de céans à consulter une série de pages du rapport litigieux, ce qui ne satisfait pas aux exigences de motivation circonstanciée posées en la matière (cf. consid. 2 supra). Au surplus, leur argumentation laisse intact le fait que le reste du rapport manque de clarté, ce dont ils ne disconviennent pas. Au considérant de l'arrêt cantonal selon lequel les réponses de l'expert N._ aux allégués n'étaient pas suffisamment structurées pour permettre de comprendre le point de vue exprimé, les recourants opposent le fait que le prénommé aurait indiqué des motifs pertinents pour écarter certains postes de travaux prétendus par les demandeurs. Cela étant, même à abonder dans leur sens, ce qui ne paraît guère possible au regard de la motivation sommaire qui sous-tend cet argument, les recourants n'expliquent pas pour quelle raison il faudrait faire prévaloir les réponses de l'expert N._ sur celles de l'expert M._.
Dans la même veine, les recourants expliquent - sans remettre en cause le fait que la norme SIA 118 ne s'applique pas à l'entier du contrat litigieux - que la référence de l'expert N._ à cette norme ne revêtirait aucune importance, dans la mesure où ses remarques se concevraient tout aussi bien au regard des règles du CO. D'après eux, il eût appartenu aux juges cantonaux de se demander si la référence erronée à la norme SIA 118 était déterminante pour chaque point évoqué dans le rapport N._. Il ne saurait en être ainsi. En raison de l'erreur fondamentale de l'expert et du manque général de clarté de son rapport, il n'y avait en effet rien d'insoutenable à s'en distancier au profit d'une expertise qui ne présentait pas les mêmes défauts.
La préférence accordée par les juges cantonaux au rapport de M._ n'étant en rien arbitraire, c'est en vain que les recourants se réfèrent à différents éléments du rapport N._ pour accréditer leurs conclusions.
Quant au fait que les juges cantonaux n'aient pas tenu compte d'un montant de 33'820 fr. pour des travaux de couverture, charpente et ferblanterie, comme les recourants l'affirment, la lecture du recours ne permet pas de discerner ce dont il est question précisément. A nouveau, les recourants renvoient la cour de céans à consulter in globo le rapport de "l'expert", par quoi il faut probablement entendre l'expert N._. Les recourants ont expressément limité leurs griefs à la constatation manifestement inexacte des faits. Nonobstant, à supposer qu'ils entendaient en sus soulever le moyen tiré d'un déni de justice formel, ce grief aurait dû être invoqué et motivé de façon détaillée (<ref-law>; ATF <ref-ruling> consid. 1.4 in fine), ce qui n'est pas le cas. Il se révèle ainsi, en tout état de cause, irrecevable.
4.
Sur le vu de ce qui précède, le recours ne peut être que rejeté dans la mesure où il est recevable.
A titre de parties qui succombent, ses auteurs prendront à leur charge les frais judiciaires (art. 66 al. 1 et 5 LTF) ainsi que les dépens auxquels les intimés peuvent prétendre pour avoir pris position sur la demande d'effet suspensif (art. 68 al. 1, 2 et 4 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté, dans la mesure où il est recevable.
2.
Les frais judiciaires, arrêtés à 5'000 fr., sont mis solidairement à la charge des recourants.
3.
Les recourants, débiteurs solidaires, verseront aux intimés, créanciers solidaires, une indemnité de 1'000 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux mandataires des parties et à la Cour d'appel civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 9 octobre 2017
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann