Faits :
A.
B._ SA (ci-après: B._) a pour but la réalisation d'opérations immobilières. Son capital-actions est détenu à hauteur de 33% par A._ AG (ci-après: A._), laquelle a repris les actifs et passifs de A1._ SA le 28 mars 2013.
D._ a été l'administrateur vice-président, puis président de B._. Au bénéfice d'abord d'une procuration collective à deux au sein de cette société, E._ y a occupé ensuite la fonction d'administrateur vice-président. Par ailleurs employé de A._, il est responsable de son agence de développement immobilier, à W._.
C1._ SA (ci-après: C1._) - dont la raison sociale deviendra C._ SA en 2018 - a pour but la construction immobilière et toute activité y relative, notamment la création d'hôtels et de bureaux. F._ a été administrateur de cette société de juillet 2014 à juin 2016 et en est actuellement l'unique actionnaire.
Le 13 décembre 2012, B._ et C1._ ont signé, par-devant notaire, un contrat de vente à terme conditionnelle avec droit d'emption, prévoyant la vente par la première à la seconde des parcelles nos 1, 2, 3, 4, 5 et 6 de la commune de V._ pour le prix de 5'500'000 fr. et comprenant une clause d'entrepreneur en faveur de A1._ SA. Les conditions auxquelles la vente était soumise portaient, d'une part, sur l'obtention par C1._ de deux permis de construire relatifs à un bâtiment commercial et un bâtiment administratif à édifier sur les parcelles précitées et, d'autre part, sur la signature des contrats d'entreprise entre C1._ et A._. Ce contrat annulait un précédent acte du 25 juillet 2012.
B._ et A._ ont été associées aux phases préliminaires du projet de C1._, en tout cas jusqu'à la délivrance du permis de construire en décembre 2013. Ainsi, le 21 juin 2013, une séance concernant le bâtiment administratif a réuni notamment D._, E._, F._ et G._, chef d'entreprise mandaté par C1._ pour négocier la vente. En raison notamment de l'ampleur du chantier, C1._ était tenue au respect d'un calendrier serré; les travaux devaient impérativement commencer dès que possible, soit dans le courant du printemps ou de l'été 2014. Les délais à tenir quant au début de la construction étaient imposés par B._ - dont la volonté était de démarrer le plus vite possible - et ont été discutés avec A._.
Le 20 décembre 2013, B._ et C1._ ont signé un acte notarié intitulé «Modification de vente à terme conditionnelle avec droit d'emption» qui comportait les clauses suivantes:
" 13.- CONDITION
La présente vente est subordonnée à l'obtention par l'acheteur, à ses frais et sous sa responsabilité:
a/ d'un permis de construire définitif et exécutoire relatif à la construction d'un bâtiment commercial d'au minimum 5'000 m2 (...) de surface brute de plancher sur les immeubles vendus (à l'exception de la parcelle 4) dont l'affectation devra être conforme aux souhaits de l'acheteur suite aux discussions préalablement tenues entre la Commune de V._ et les comparantes, préalablement à la signature du présent acte. (...)
b/ d'un permis de construire définitif et exécutoire relatif à la construction d'un bâtiment avec affectation de type administratif avec une surface brute de plancher d'au minimum 5'000 m2 (...) sur la parcelle 4 de V._ vendue. (...)
16.- DIVERS
L'acheteur s'engage irrévocablement à confier la réalisation des bâtiments à ériger selon le (s) permis de construire objet de la condition de l'article 13 ci-dessus à la société anonyme A._ SA. Les contrats entre l'acheteur et A._ SA seront conclus à livres ouverts; la rémunération de A._ SA, à discuter entre les parties, sera fixée au maximum à 5% du coût total des travaux hors taxes, à laquelle s'ajoutera le cas échéant après entente entre les parties un montant de 5% maximum pour les risques et garanties liés à l'exécution des travaux. Ne sont pas inclus dans ces taux les honoraires des éventuels mandataires spécialistes en cas de besoin de recours à de tels mandataires. L'acheteur conservera en tout temps la faculté de proposer, choisir ou exclure l'architecte ou les entreprises appelés à soumissionner. L'acheteur entendant réaliser lui-même les aménagements intérieurs, le cahier des charges de A._ SA pourra être limité en conséquence.
L'acheteur s'engage à signer les contrats avec la société anonyme A._ SA dans un délai de 12 mois dès ce jour, que la réquisition de transfert ait été ou non signée. Cette signature n'est toutefois pas une condition du présent acte.
(...) "
A la différence de l'acte du 13 décembre 2012, l'acte du 20 décembre 2013 ne soumettait donc plus la vente à la condition de la signature du contrat entre l'acheteuse et l'entreprise générale.
Peu après la délivrance du permis de construire le 24 décembre 2013, E._ a téléphoné à l'architecte mandaté par C1._ afin d'organiser une séance et d'aller de l'avant dans le projet immobilier de V._. L'architecte lui a répondu qu'il fallait contacter C1._, dès lors qu'il était chargé de l'établissement des plans, mais non de la direction des travaux.
Le transfert des parcelles a eu lieu le 28 février 2014.
Par courriel du 28 avril 2014, G._ a proposé une rencontre à E._. Il se référait à un accord de principe avec une société disposée à s'engager en qualité de locataire générale du complexe immobilier de V._, solution impliquant toutefois certaines contraintes, en particulier quant au choix des entreprises et sous-traitants mandatés pour la construction; il précisait qu'il faudrait "moduler" l'accord avec A._ afin de pouvoir satisfaire les exigences du locataire pressenti.
Le 5 mai 2014, E._ a proposé la date du 21 mai 2014 afin de "finaliser [leurs] accords sur la réalisation de ce chantier" dans les bureaux de A._, à W._.
Le 5 mai 2014 également, I._ SA a commencé, sur les parcelles de V._, les travaux de terrassement que C1._ lui avait attribués. En outre, par contrat d'entreprise du 15 mai 2014, C1._ a confié à J._ SA les travaux de béton armé.
A l'issue de la séance du 21 mai 2014, E._ a adressé un courriel notamment à D._ et à une juriste de A._; le passage suivant y figurait:
"En référence à la séance de ce jour avec M. G._, concernant la réalisation des bâtiments pour la société précitée, M. G._ nous a informé que:
> Les travaux ont bien démarrés (sic), le coût de ces travaux de terrassement serait financé par lui-même (...)
> Que le démarrage a été la conséquence d'un locataire qui lui signerait un bail pour l'ensemble du futur bâtiment lui permettant d'obtenir le financement bancaire
> Le locataire pressenti a l'habitude de travailler toujours avec la même entreprise (qui n'est pas A._)
De son point de vue, il a cité trois options:
a) Abandon de l'accord avec le locataire
b) Changement d'avis du locataire, qu'il a confirmé pas envisageable
c) Signature du bail avec le futur locataire, indemnisation de A._ pour non réalisation des travaux.
C'est l'option c) qu'il souhaite négocier car il a décidé d'aller de l'avant et donc il attend une proposition de la part de A._.
Toute autre proposition de collaboration a été donc refusée.
Cette position n'est pas celle qui a été entretenue dans les discussions précontractuelles et encore moins notifié (sic) dans les actes entre la société C1._ SA et la SI B._ SA."
Le 22 mai 2014, B._ et A._ ont requis des mesures superprovisionnelles et provisionnelles tendant à l'arrêt immédiat des travaux entrepris par C1._ sur le chantier de V._ et exécutés par d'autres entrepreneurs que A._.
Le 5 juin 2014, C1._ a envoyé à B._ un courrier qui comportait les lignes suivantes:
(...) C'est à votre demande que les conditions de l'acte de vente à terme conditionnelle ont été modifiées le 16 décembre 2013. Dans l'avenant signé à cette date, C1._ s'était engagée envers B._ SA à confier un contrat d'entreprise générale à A1._ SA. Cet engagement de principe ne fixait pas tous les éléments essentiels de ce contrat, notamment en termes de rémunération. Il précisait néanmoins que nous nous engagions à signer avec A1._ SA dans un délai de douze mois, à savoir d'ici au 16 décembre 2014, date non échue à ce jour. Bien que cette échéance ne soit pas atteinte, nous avons tenté de joindre B._ SA à de réitérées reprises, sans retour. Nous n'avons pas davantage vu la moindre interpellation de la part de A1._ SA.
Nous avons certes procédé à des travaux d'excavation et de terrassement qui ont commencé dans le courant du mois de mai dernier, en toute transparence puisque nous avons organisé une conférence de presse et que des articles ont paru dans les journaux. C'est dire que nous n'avions rien à cacher. Je rappelle, par ailleurs, qu'en qualité d'acheteur, nous nous étions réservé la faculté de choisir en tout temps aussi bien l'architecte que les entreprises appelées à soumissionner. C'est dire que les travaux d'excavation et de terrassement que nous avons commencés ne contreviennent en rien à nos engagements contractuels.
Le peu d'empressement de B._ SA (et même de A1._ SA) à nous revenir concernant un contrat d'entreprise générale est un point sur lequel nous n'aurions rien à redire si nous n'avions pas eu la surprise d'apprendre que, pour seule réponse à nos sollicitations, votre société et A1._ SA avaient déposé une procédure de mesures préprovisionnelles et provisionnelles tendant à faire interrompre les travaux. Cette procédure laisse entendre à une autorité judiciaire que C1._ SA n'avait pas l'intention de respecter ses engagements contractuels. Sachez qu'en soi, ces allégations sont diffamatoires.
(...)
Enfin, conformément à l'engagement qu'elle a pris le 16 décembre 2013, C1._ SA confirme sa volonté de confier un contrat d'entreprise générale à A1._ SA, contrat qu'il y a lieu de signer dans les meilleurs délais. La rémunération de ce contrat est censée être discutée entre les parties. Considérant l'ensemble des circonstances de notre chantier, une rémunération fixée à 2% du coût total des travaux hors taxes nous paraît proportionnée.
(...) "
Le 6 juin 2014, D._, E._ et H._, collaborateur de A._, ont rencontré G._. Les parties divergent sur le déroulement de cette réunion. Selon G._, les représentants de A._ lui ont demandé de "dégager" après lui avoir fait savoir qu'aucun contrat ne serait signé et qu'ils ne travailleraient jamais avec C1._ dont les représentants ne seraient pas des "gens sérieux". En revanche, d'après E._ et D._, G._ entendait exclusivement négocier une indemnisation pour irrespect de la clause d'entrepreneur, mais a offert des montants tellement bas que la discussion s'en est trouvée d'emblée close.
Le même jour, le conseil de C1._ a adressé à B._ le courrier suivant:
(...) Les documents contractuels (...) font état d'un engagement de principe qu'a pris [C1._] de conclure un contrat d'entreprise générale avec A1._ SA pour les travaux de construction sur les parcelles transférées le 28 février dernier. L'engagement de principe de ma mandante n'a jamais été remis en cause. Au contraire, ses représentants m'ont fait part des tentatives répétées de vous contacter en vue de discuter des modalités du contrat d'entreprise, sans que cela ne provoque la moindre réaction de votre part. Vous ne pouvez d'ailleurs pas davantage vous retrancher derrière l'attitude de A1._ SA qui n'a pas été plus active.
Ma cliente avait encore un espoir que les clauses contractuelles qui vous lient puissent être mises en oeuvre ce matin, lors de la réunion qui s'est tenue en vos bureaux. (...). Tant la durée de cette réunion qui n'a, semble-t-il, pas duré plus d'une minute, que l'accueil glacial qui a été réservé à M. G._, ont malheureusement démontré qu'en réalité, ni votre entreprise ni A1._ SA n'a la moindre intention de conclure un contrat d'entreprise générale avec C1._ SA, ni même de chercher une solution transigée. (...)
Croyant encore, bien qu'il y ait peu de place au doute, que votre comportement et celui du représentant de A1._ SA en la personne de M. H._ relèvent d'une méconnaissance du droit, sans parler de celle de la bonne foi en affaires, C1._ SA vous met ici en demeure de lui revenir ce jour encore, jusqu'à 17h00 dernier délai, pour discuter et convenir des modalités du contrat d'entreprise générale.
Dans la mesure où vous avez des contacts directs avec A1._ SA, je vous charge de lui transmettre le contenu de la présente.
(...) "
La société intéressée par la location du complexe de V._ s'est finalement rétractée.
Dans sa réponse du 10 juin 2014, le conseil de A._ et de B._ a notamment écrit:
"Je prends acte du fait que l'engagement pris par votre mandante de conclure un contrat d'entreprise générale avec la société A._ SA n'est pas remis en cause. Les faits contredisent toutefois cette affirmation puisque des panneaux de l'entreprise générale J._ ornent maintenant les lieux.
(...)
Contrairement à vos affirmations, A._ SA n'a jamais renoncé à conclure un contrat d'entreprise générale avec C1._ SA. (...) Ceci étant, il appartient à votre cliente, Maître de l'ouvrage, de formuler une proposition concernant les modalités de ce contrat d'entreprise, A._ SA n'étant pas en mesure de faire une proposition sur un projet dont elle ne connaît pas tous les tenants et aboutissants. Par conséquent, je fixe à mon tour à votre mandante un délai échéant le jeudi 12 juin prochain à 17h pour formuler une proposition complète et détaillée de contrat d'entreprise et fournir toute pièce utile aux fins de permettre à A._ SA d'examiner en parfaite connaissance de cause les modalités de cette offre. A défaut ma cliente en tirera les conséquences qui s'imposent. (...) "
Par pli du 13 juin 2014, le conseil de C1._ a répliqué en ces termes:
(...)
C1._ SA est stupéfaite, après ses vaines tentatives de contact avec B._ SA et A1._ SA que celles-ci inversent la situation de fait. (...)
C1._ SA, qui n'en est plus à une surprise près, s'étonne qu'il lui appartiendrait de "formuler une proposition concernant les modalités de contrat d'entreprise générale" au motif que A._ ne serait pas en mesure de le faire. La plus grande entreprise générale de Suisse n'aurait-elle pas les capacités de préparer un tel contrat? A._ est censée être rémunérée sur la base d'un contrat d'entreprise générale. Ce n'est quand même pas à ma mandante de faire le travail à sa place. Pour vos clientes, qui n'ont apparemment pas relu les textes contractuels, je rappelle qu'il était prévu de discuter de la rémunération de A._ entre les parties. C'est à ce titre que, le 5 juin dernier, ma mandante a envoyé un courrier recommandé à B._ SA confirmant sa volonté de principe de confier un contrat à A._ et proposant, compte tenu des circonstances du chantier, une rémunération de 2% du coût total des travaux hors taxes. Pour votre information, le coût total de ces travaux est estimé à CHF 30'000'000.-.
A1._ SA est, comme son nom l'indique, une entreprise générale professionnelle. Vous voudrez bien dès lors m'indiquer quelles pièces lui seraient utiles pour "examiner en parfaite connaissance de cause les modalités du contrat". C1._ SA somme B._ SA et A1._ SA de lui remettre une proposition de contrat d'entreprise générale dans un délai de quarante-huit heures dès réception de la présente, ma cliente se tenant évidemment à disposition pour donner des informations qui seraient nécessaires à l'établissement de ce projet.
(...) "
Ni A._ ni B._ n'ont donné suite à ce courrier.
Le 23 juin 2014, C1._ a sommé une dernière fois A._ et B._ de lui remettre d'ici au 24 juin 2014 à 18h00 une proposition de contrat d'entreprise générale, tout en précisant que leur comportement justifierait déjà qu'elle se libère de ses engagements contractuels.
Le 24 juin 2014, le conseil de A._ et de B._ a transmis au conseil de C1._, à compléter par sa mandante, des projets de contrat d'entreprise générale standards et vierges, qui ne mentionnaient ni le nom des parties, ni le projet de construction en cause ni le prix des travaux. A._ et B._ faisaient valoir qu'elles ne disposaient pas de toutes les informations nécessaires pour pouvoir proposer une offre détaillée conforme aux volontés de C1._.
Dans la procédure de mesures provisionnelles, une audience a eu lieu le 15 juillet 2014 devant le Juge délégué de la Chambre patrimoniale du canton de Vaud. A cette occasion, F._ a déclaré que C1._ n'entendait plus travailler avec A._.
Par ordonnance du 22 juillet 2014, le Juge délégué a rejeté la requête de mesures provisionnelles.
B.
Par requête de conciliation du 3 août 2015, puis demande du 3 février 2016, B._ et A._ ont conclu à ce que C1._ soit reconnue la débitrice de A._ - subsidiairement de B._ et de A._ solidairement entre elles - et lui/leur doive immédiat paiement d'un montant de 2'500'000 fr. avec intérêts à 5% dès le 20 décembre 2013.
Une expertise judiciaire a été ordonnée. Selon le rapport de l'expert du 28 septembre 2017, le coût des travaux de construction sur les parcelles litigieuses n'est pas inférieur à 50 millions de francs; par ailleurs, la rémunération usuelle de l'entreprise générale est de 5%, sans qu'un tel taux puisse de facto être admis comme contractuel.
Par jugement du 9 juillet 2018, la Chambre patrimoniale du canton de Vaud a rejeté la demande.
Statuant le 23 juillet 2019 sur appel de B._ et A._, la Cour d'appel civile du canton de Vaud a confirmé le jugement de première instance. En substance, elle a jugé que les demanderesses avaient contribué dans une mesure très importante à l'événement qui avait poussé la défenderesse à se départir du précontrat d'entreprise en date du 15 juillet 2014; en conséquence, l'entrepreneur ne pouvait pas prétendre à l'indemnisation complète prévue par l'art. 377 CO en cas de résiliation anticipée par le maître.
C.
A._ (recourante n° 1) et B._ (recourante n° 2) interjettent un recours en matière civile, tendant à la réforme de l'arrêt attaqué en ce sens que C._ SA est la débitrice de A._ et lui doit immédiat paiement de 2'500'000 fr. - subsidiairement de 885'604 fr.20 - avec intérêts à 5% l'an dès le 20 décembre 2013.
C._ SA propose le rejet du recours.
Les recourantes ont encore déposé des observations, suivies d'une ultime détermination de l'intimée.
Pour sa part, la cour cantonale se réfère aux considérants de son arrêt.

Considérant en droit :
1.
Le recours est dirigé contre un arrêt final (art. 90 LTF) rendu en matière civile (art. 72 al. 1 LTF) par le tribunal supérieur institué comme autorité cantonale de dernière instance, lequel a statué sur recours (art. 75 LTF). La cause atteint la valeur litigieuse de 30'000 fr. ouvrant le recours en matière civile dans les affaires pécuniaires ne relevant ni du droit du travail, ni du droit du bail à loyer (art. 74 al. 1 let. b LTF). Les recourantes, dont les conclusions condamnatoires ont été rejetées, ont la qualité pour recourir (art. 76 al. 1 LTF). Déposé dans le délai (art. 46 al. 1 let. b et art. 100 al. 1 LTF) et la forme (art. 42 LTF) prévus par la loi, le recours est en principe recevable, sous réserve de l'examen des griefs particuliers.
2.
2.1. Le recours en matière civile peut être exercé pour violation du droit fédéral (art. 95 let. a LTF), y compris le droit constitutionnel (<ref-ruling> consid. 2.1 p. 247; <ref-ruling> consid. 2.4 p. 313). Le Tribunal fédéral applique le droit d'office (art. 106 al. 1 LTF). Il n'est donc limité ni par les arguments soulevés dans le recours, ni par la motivation retenue par l'autorité précédente; il peut admettre un recours pour un autre motif que ceux qui ont été invoqués et il peut rejeter un recours en adoptant une argumentation différente de celle de l'autorité précédente (<ref-ruling> consid. 2 p. 89; <ref-ruling> consid. 1.3 p. 336; <ref-ruling> consid. 1.4; <ref-ruling> consid. 1.4 p. 400). Compte tenu de l'exigence de motivation contenue à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (art. 108 al. 1 let. b LTF), le Tribunal fédéral n'examine en principe que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes. Il n'est pas tenu de traiter, comme le ferait une autorité de première instance, toutes les questions juridiques qui se posent, lorsque celles-ci ne sont plus discutées devant lui (<ref-ruling> consid. 2, 115 consid. 2; <ref-ruling> consid. 1.3). Par exception à la règle selon laquelle il applique le droit d'office, il n'examine la violation d'un droit constitutionnel que si le grief a été invoqué et motivé de façon détaillée (art. 106 al. 2 LTF; <ref-ruling> consid. 2.3; <ref-ruling> consid. 1.3; <ref-ruling> consid. 1.4 in fine).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (art. 105 al. 1 LTF). 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'art. 95 LTF (art. 105 al. 2 LTF). "Manifestement inexactes" signifie ici "arbitraires" (<ref-ruling> consid. 1.3.1 p. 253; <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 (art. 97 al. 1 LTF).
La critique de l'état de fait retenu est soumise au principe strict de l'allégation énoncé par l'art. 106 al. 2 LTF (<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 les conditions précitées 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). 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 (art. 99 al. 1 LTF).
3.
Avant d'examiner les griefs des recourantes, il convient de poser le contexte juridique dans lequel les rapports entre les parties se sont noués.
3.1. Le contrat de vente conclu entre la recourante n° 2 et l'intimée comportait une clause d'entrepreneur en faveur de la recourante n° 1. Par ce précontrat (art. 22 al. 1 CO) sous forme d'une stipulation pour autrui (art. 112 CO), l'intimée (promettante) s'est engagée envers la recourante n° 2 (stipulante) à conclure avec la recourante n° 1 (tiers bénéficiaire) un contrat d'entreprise générale (contrat principal) portant sur les bâtiments à ériger sur les immeubles vendus, conformément aux permis de construire dont l'obtention par l'acquéresse était une condition de la vente. Les parties ne contestent pas l'interprétation des premiers juges selon laquelle cette stipulation pour autrui est parfaite (art. 112 al. 2 CO); au même titre que la recourante n° 2 partie au précontrat, la recourante n° 1 pouvait ainsi exiger que l'intimée concourût à la conclusion du contrat principal.
Les parties au précontrat d'entreprise se sont entendues sur l'ouvrage à réaliser et sur le caractère onéreux de l'exécution, soit les éléments objectivement essentiels du contrat principal (PETER GAUCH, Der Werkvertrag, 6e éd. 2019, n° 381 p. 176, n° 420 p. 196; ADRIEN GABELLON, Le précontrat - Développements et perspectives, 2014, n° 364 p. 141). La rémunération de l'entrepreneur, fixée au maximum à 5% du coût total des travaux hors taxes, devait encore être discutée entre les futures parties au contrat d'entreprise générale.
3.2. L'art. 377 CO accorde au maître le droit de résilier en tout temps le contrat d'entreprise, pour autant que l'ouvrage ne soit pas terminé. Dans le cadre d'une clause d'entrepreneur, cette disposition permet également à l'acheteur de se départir de l'obligation de conclure le contrat d'entreprise, dans la mesure où le droit de résiliation n'a pas été supprimé (cf. <ref-ruling> consid. 4a p. 276; arrêt 4C.387/2001 du 10 septembre 2002 consid. 6.2; GAUCH, op. cit., n° 429 p. 200; TERCIER/BIERI/CARRON, Les contrats spéciaux, 5e éd. 2016, n° 3622 p. 494; ALFRED KOLLER, Schweizerisches Werkvertragsrecht, 2015, n° 86 p. 35 s.).
Ce droit formateur s'exerce par une manifestation de volonté sujette à réception, qui peut intervenir par actes concluants et s'interprète selon les règles générales en la matière (FRANÇOIS CHAIX, in Commentaire romand, Code des obligations I, 2e éd. 2012, n° 7 ad art. 377 CO).
En l'espèce, les recourantes contestent la date à laquelle l'intimée a refusé définitivement de conclure le contrat d'entreprise, telle que retenue dans l'arrêt attaqué (cf. consid. 4 infra).
3.3. Le droit du maître de résilier le contrat de façon prématurée suppose notamment l'indemnisation complète de l'entrepreneur (art. 377 CO); cette règle s'applique également lorsque la partie au précontrat d'entreprise fait usage de son droit de retrait (GAUCH, op. cit., n° 429 p. 200/201; KOLLER, op. cit., n° 86 p. 36). L'indemnité due par le maître correspond à des dommages-intérêts positifs, couvrant l'intérêt de l'entrepreneur à l'exécution complète du contrat; elle inclut donc le gain manqué (<ref-ruling> consid. 5 p. 196; plus récemment, arrêts 4A_129/2017 du 11 juin 2018 consid. 3.1 et 4A_189/2017 du 5 octobre 2017 consid. 3.2.1). La prétention exercée en l'espèce, à hauteur de 5% du coût des travaux, correspond à l'intérêt positif de la recourante n° 1 à l'exécution du contrat d'entreprise.
Des justes motifs - qui rendent la continuation du contrat insupportable pour le maître et qui sont en principe imputables à l'entrepreneur - peuvent réduire, voire supprimer le droit à une indemnité complète, en tout cas lorsqu'ils ne se confondent pas avec les motifs prévus à l'art. 366 CO. Ainsi en va-t-il si l'entrepreneur, par son comportement fautif, a contribué dans une mesure importante à l'événement qui a poussé le maître à se départir du contrat; la perte de confiance du maître en l'entrepreneur ne saurait suffire à elle seule (cf. arrêts 4C.387/2001 précité consid. 6.2 et 6.5 in fine, 4C.393/2006 du 27 avril 2007 consid. 3.3.2, 3.3.3 et 3.4, 4D_8/2008 du 31 mars 2008 consid. 3.4.1, 4A_96/2014 du 2 septembre 2014 consid. 4.1, 4A_551/2015 du 14 avril 2016 consid. 7.3 et 4A_129/2017 précité consid. 3.1; GAUCH, op. cit., nos 569 ss p. 256 ss; CHAIX, op. cit., n° 18 ad art. 377 CO).
L'existence d'un juste motif de résiliation et son incidence sur l'obligation d'indemniser à charge du maître sont des questions d'appréciation à trancher selon les règles du droit et de l'équité (art. 4 CC) (arrêts 4C.393/2006 précité consid. 3.3.3 et 4C.387/2001 précité consid. 6.2). De jurisprudence constante, le Tribunal fédéral ne revoit qu'avec réserve la décision prise par le juge en vertu de son pouvoir d'appréciation. Il n'intervient que lorsque la décision s'écarte sans raison des règles établies par la doctrine et la jurisprudence en matière de libre appréciation, lorsqu'elle repose sur des faits qui, dans le cas particulier, ne devaient jouer aucun rôle ou, au contraire, lorsqu'elle ignore des éléments qui auraient absolument dû être pris en considération; en outre, le Tribunal fédéral redresse les décisions rendues en vertu d'un pouvoir d'appréciation lorsqu'elles aboutissent à un résultat manifestement injuste ou à une iniquité choquante (<ref-ruling> consid. 11.2 p. 98; <ref-ruling> consid. 9.2. p. 70; <ref-ruling> consid. 2.1.3, 669 consid. 3.1 p. 671).
En l'espèce, les recourantes nient que les circonstances justifient la suppression de toute indemnité fondée sur l'art. 377 CO (cf. consid. 5 infra).
4.
Selon l'arrêt attaqué, l'intimée a résilié le précontrat découlant de la clause d'entrepreneur en date du 15 juillet 2014, lorsque son administrateur a déclaré ne plus vouloir travailler avec la recourante n° 1 au cours de l'audience de mesures provisionnelles.
Pour les recourantes, l'intimée a exercé irrévocablement son droit de résiliation plus tôt, à savoir le 5 mai 2014 lorsque les travaux de terrassement confiés à un autre entrepreneur ont débuté de manière reconnaissable pour la recourante n° 1, voire lors de la réunion du 21 mai 2014 lorsque le représentant de l'intimée a confirmé le démarrage des travaux de terrassement et exprimé la volonté de négocier uniquement une indemnité pour non-exécution de la clause d'entrepreneur.
4.1. En matière d'interprétation des manifestations de volonté (cf. art. 18 CO), le juge doit, dans un premier temps, rechercher la réelle et commune intention des parties (interprétation subjective), le cas échéant empiriquement, sur la base d'indices. Constituent des indices en ce sens non seulement la teneur des déclarations de volonté - écrites ou orales -, mais encore le contexte général, soit toutes les circonstances permettant de découvrir la volonté réelle des parties, qu'il s'agisse de déclarations antérieures à la manifestation de volonté ou de faits postérieurs à celle-ci, en particulier le comportement ultérieur des parties établissant quelles étaient leurs conceptions à l'époque. L'appréciation de ces indices concrets par le juge, selon son expérience générale de la vie, relève du fait et ne peut être revue que sous l'angle de l'arbitraire (art. 9 Cst.).
Ce n'est que s'il ne parvient pas à déterminer la volonté réelle et commune des parties ou s'il constate qu'une partie n'a pas compris la volonté exprimée par l'autre que le juge recourra à l'interprétation normative (ou objective). Fondée sur le principe de la confiance, cette interprétation consiste à déterminer le sens qu'une partie pouvait et devait raisonnablement prêter à la manifestation de volonté de l'autre partie. Il s'agit là d'une question de droit que le Tribunal fédéral revoit librement (cf. <ref-ruling> consid. 5.2.2 et 5.2.3 p. 98 s. et les arrêts cités).
4.2. La cour cantonale a retenu que, d'une part, l'intimée n'avait pas la volonté de se départir du précontrat d'entreprise en mai 2014, au moment où elle a confié des travaux à des tiers et, d'autre part, que les recourantes n'avaient pas considéré les travaux de terrassement entrepris dès le 5 mai 2014 comme une déclaration univoque de résiliation du précontrat par l'intimée. Il s'agit là de constatations de fait, fondées sur les comportements adoptés par les parties après le début des travaux de terrassement, en particulier l'échange de correspondance de juin 2014.
C'est donc sur la base d'une interprétation subjective que la cour cantonale a établi que, en attribuant des travaux à des entreprises tierces, l'intimée n'avait pas manifesté la volonté de ne pas conclure le contrat principal avec la recourante n° 1 et que cette dernière n'avait alors pas compris le commencement des travaux comme une rupture du précontrat. Les recourantes se méprennent lorsqu'elles voient dans l'analyse de l'échange de correspondance de juin 2014, postérieur aux faits envisagés, la marque d'une interprétation objective, relevant du droit. En tant qu'elles invoquent une violation de l'art. 377 CO et du principe de la confiance dans ce contexte, les recourantes formulent dès lors des griefs irrecevables. Seul le moyen tiré d'une appréciation arbitraire des faits et des preuves sera examiné.
4.2.1. En matière de constatations de fait et d'appréciation des preuves, le Tribunal fédéral se montre réservé, vu le large pouvoir qu'il reconnaît en ce domaine aux autorités cantonales. Il 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. L'arbitraire ne résulte pas du seul fait qu'une autre solution serait concevable, voire préférable (<ref-ruling> consid. 2.3 p. 266; <ref-ruling> consid. 4.2 p. 234; <ref-ruling> consid. 4.2 p. 560; <ref-ruling> consid. 4.3; <ref-ruling> consid. 1.4.3).
4.2.2. Selon les recourantes, le seul fait de confier des travaux à des tiers en mai 2014 et de le porter à la connaissance de la recourante n° 1 constituait une déclaration univoque de volonté de la part de l'intimée de ne pas conclure le contrat principal. Cette intention aurait été confirmée le 21 mai 2014, lorsque l'intimée, par son représentant, aurait exprimé la volonté de négocier uniquement une indemnité pour non-exécution de la clause d'entrepreneur, conduisant la recourante n° 1 à déposer le lendemain des mesures provisionnelles afin de faire cesser les travaux. L'acte formateur exercé en mai 2014 étant irrévocable, l'échange de correspondance postérieur de juin 2014 serait sans pertinence. La cour cantonale aurait ainsi apprécié arbitrairement les faits et les moyens de preuve en ne retenant pas que l'intimée avait, sans doute possible, résilié la clause d'entrepreneur le 5 mai 2014 ou, en tout cas, le 21 mai 2014.
Au demeurant, les courriers échangés en juin 2014 confirmeraient la résiliation de la clause d'entrepreneur en mai 2014, car les discussions alors en cours auraient concerné un autre contrat d'entreprise, portant sur les travaux qui n'avaient pas été confiés à des entreprises tierces. Sous l'angle de l'arbitraire, les recourantes s'en prennent à la déduction tirée par la cour cantonale du courrier de leur conseil du 10 juin 2014, selon laquelle le précontrat n'avait, pour elles, pas été résilié par l'intimée; certes, le conseil aurait pris acte de l'engagement de l'intimée de conclure un contrat d'entreprise générale avec la recourante n° 1, mais aurait aussitôt mis en doute cette volonté en invoquant les panneaux d'une autre entreprise générale ornant les lieux.
4.2.3. Il ressort des faits non contestés de l'arrêt attaqué que les travaux de terrassement ont débuté le 5 mai 2014 et que la recourante n° 1 en a pris connaissance en tout cas le 21 mai 2014. Il n'est au surplus pas établi que les contrats eux-mêmes, passés en mai 2014 par l'intimée avec d'autres entreprises que la recourante n° 1, aient alors été connus de cette dernière, ni que d'autres travaux que ceux relatifs à la préparation du terrain aient eu lieu à l'époque.
Par ailleurs, la teneur de la réunion du 21 mai 2014 ne figure pas dans l'état de fait retenu par la cour cantonale. La volonté prétendument exprimée à cette occasion par le représentant de l'intimée - négocier uniquement une indemnité pour non-exécution des travaux - n'est décrite que dans le courriel du 21 mai 2014 adressé à l'interne par l'employé de la recourante n° 1. Constatant que l'intimée a contesté l'allégué correspondant des recourantes, la cour cantonale utilise le conditionnel à ce sujet. Contrairement à ce que les recourantes prétendent, le comportement adopté par le représentant de l'intimée le 21 mai 2014, non constaté, n'est donc pas un élément propre à confirmer la volonté de l'acheteuse de ne pas conclure avec le tiers bénéficiaire un contrat d'entreprise générale portant sur les bâtiments à construire sur les parcelles vendues.
Cela étant, le début des travaux de terrassement effectués par un autre entrepreneur n'est pas un élément qui permet, à lui seul, de déduire que l'intimée entendait nécessairement se départir de la clause d'entrepreneur et éteindre ainsi son obligation de conclure le contrat d'entreprise générale prévu dans le contrat de vente tel que modifié le 20 décembre 2013. La cour cantonale pouvait sans arbitraire rechercher, en fait, la réelle volonté de l'intimée et sa compréhension par la recourante n° 1 en se fondant sur les éléments postérieurs, en particulier l'échange de correspondance de juin 2014.
Sur ce point, il est établi que les parties ont eu des discussions à propos de la conclusion du contrat d'entreprise générale après le 21 mai 2014 et jusqu'à la fin juin 2014.
Dans son courrier du 5 juin 2014, l'intimée évoque les travaux de terrassement engagés, qu'elle ne considère pas comme contrevenant à ses engagements résultant de la clause d'entrepreneur, puis elle confirme sa volonté de conclure un contrat d'entreprise générale avec la recourante n° 1 et propose une rémunération de l'entrepreneur à hauteur de 2% du coût total des travaux hors taxes. Dans sa lettre du 6 juin 2014, le conseil de l'intimée met en demeure les recourantes de négocier le contrat d'entreprise générale. Dans son courrier du 13 juin 2014, il rappelle la proposition de rémunération formulée précédemment par sa mandante et somme les recourantes de lui remettre une proposition de contrat d'entreprise générale. Cette sommation est réitérée dans le courrier du 24 juin 2014. Il n'est pas insoutenable de déduire de ces plis que l'intimée avait toujours, à l'époque, la volonté de conclure le contrat d'entreprise générale prévu dans le contrat de vente.
La thèse des recourantes selon laquelle l'intimée entendait conclure un "autre" contrat d'entreprise, portant uniquement sur le solde des travaux, ne repose sur aucun fondement. Elle omet que, d'une part, le précontrat garantissait une certaine latitude à l'intimée dans le choix des entreprises appelées à travailler sur le chantier et, d'autre part, que les futures parties au contrat principal devaient encore discuter de la rémunération de l'entrepreneur général, limitée simplement par la clause d'entrepreneur à 5% du coût total des travaux hors taxes; or, la proposition de rémunération formulée par l'intimée entrait dans ce cadre.
Par ailleurs, les recourantes ont effectivement compris la volonté de l'intimée de conclure le contrat principal, comme la cour cantonale l'a établi sans arbitraire sur la base des envois de leur conseil des 10 et 24 juin 2014. Dans le premier courrier, elles ont certes émis quelques doutes sur la sincérité de l'engagement à conclure de l'intimée, mais elles n'en ont pas moins pris acte. Et surtout, par le second pli, elles ont fini, à la suite des démarches insistantes de l'intimée, par lui adresser un projet de contrat d'entreprise générale à compléter.
4.3. En conclusion, la cour cantonale n'a pas violé l'art. 9 Cst. en retenant le 14 juillet 2014 comme date à laquelle l'intimée a manifesté sa volonté de ne pas conclure un contrat d'entreprise générale avec la recourante n° 1 et résilié ainsi la clause d'entrepreneur contenue dans le contrat de vente.
5.
Appréciant le comportement respectif des parties, la cour cantonale est arrivée à la conclusion que les recourantes avaient contribué dans une mesure très importante à l'événement qui avait poussé l'intimée à se départir du précontrat, sans que l'attitude de l'intimée ne justifiât que les risques liés à la non-conclusion du contrat principal fussent répartis entre les parties. La suppression de tout droit à une indemnité fondée sur l'art. 377 CO apparaissait dès lors justifiée.
Selon l'arrêt attaqué, les recourantes n'ont pas répondu aux diverses sollicitations de l'intimée. A leur charge, la cour cantonale a retenu un comportement pour le moins passif dans le cadre de l'établissement du contrat principal à conclure. De l'autre côté, l'intimée, soumise au respect de courts délais imposés par les recourantes, était légitimée à aller de l'avant, au vu de la passivité de ces dernières, et à nouer ainsi un lien contractuel - qui n'était pas un contrat d'entreprise générale - avec des entreprises tierces. La cour cantonale nie au demeurant que la passivité des recourantes soit en lien avec le comportement de l'intimée.
5.1. Les recourantes font valoir que l'analyse de la cour cantonale repose sur une appréciation arbitraire des faits.
D'une part, elles exposent que l'échange de correspondance de juin 2014 fondant la prétendue responsabilité de la recourante n° 1 dans la résiliation de la clause d'entrepreneur est intervenu après que l'intimée a confié des travaux à des entreprises tierces, en mai 2014 et qu'"aucun comportement passif" ne peut être imputé à la recourante n° 1 avant mai 2014. L'intimée n'aurait ainsi pas été légitimée à conclure des contrats avec des entreprises tierces en mai 2014.
D'autre part, les recourantes contestent toute passivité de la part de la recourante n° 1 en juin 2014, pour n'avoir pas établi un contrat d'entreprise générale. A leur sens, le devoir de collaboration du maître de l'ouvrage imposait à l'intimée de fournir à l'entrepreneur tous les documents pertinents en vue de la préparation du contrat d'entreprise générale. Selon les recourantes, l'autorité précédente ne pouvait dès lors imputer à la recourante n° 1 une quelconque faute pour n'avoir pas désigné les documents qui lui étaient nécessaires à l'établissement dudit contrat.
5.2. Dans la clause d'entrepreneur ici en jeu, seule l'intimée (promettante) s'est engagée à conclure le contrat d'entreprise générale avec la recourante n° 1 (tiers bénéficiaire), qui demeurait libre d'exercer les droits conférés par le précontrat (GABELLON, op. cit., n° 313 p. 122). Si elle souhaitait la conclusion du contrat principal, la recourante n° 1 devait y participer activement, en manifestant sa volonté à cet effet (GABELLON, op. cit. n° 311 p. 121). En l'espèce, la clause d'entrepreneur prévoyait notamment que les futures parties au contrat principal devaient encore s'entendre sur le taux de rémunération de l'entrepreneur général, dont seule la limite supérieure était fixée. C'est dire que le comportement de l'entreprise bénéficiaire durant cette phase précontractuelle est une circonstance à prendre en compte pour déterminer si l'intimée disposait de justes motifs pour renoncer à conclure le contrat d'entreprise. Sur ce point, la cour cantonale a qualifié de passive l'attitude de la recourante.
Contrairement à ce que les recourantes soutiennent, l'autorité précédente a constaté l'absence de réponse de l'entreprise bénéficiaire aux diverses sollicitations de l'intimée déjà lors de la période précédant l'échange de correspondance de juin 2014. En effet, elle a relevé que les recourantes n'avaient pas contesté la teneur du courrier du 6 juin 2014, dans lequel le conseil de l'intimée rappelait les tentatives répétées de sa cliente en vue de discuter des modalités du contrat d'entreprise, restées sans la moindre réaction.
Il est établi par ailleurs que la recourante n° 1, à laquelle il appartenait de manifester à l'intimée son intention de conclure le contrat principal, n'a pris l'initiative qu'une seule fois, en décembre 2013, en ne s'adressant toutefois pas au bon interlocuteur. Par la suite, alors que la recourante n° 1 connaissait la nécessité de débuter les travaux sur le chantier rapidement - soit au printemps ou à l'été 2014 - et qu'elle était confrontée à la demande de rencontre du 28 avril 2014, elle a proposé à l'intimée une seule date de rendez-vous, près de quatre semaines plus tard.
Le lendemain de cette rencontre, le 22 mai 2014, les recourantes ont introduit les mesures provisionnelles tendant à faire cesser les travaux de terrassement commandés entre-temps par l'intimée à une autre entreprise. Ce faisant, la recourante n° 1 a manifesté par acte concluant qu'elle souhaitait toujours passer contrat avec l'intimée.
Dans son courrier du 5 juin 2014, l'intimée a alors confirmé sa volonté de conclure un contrat d'entreprise générale avec la recourante n° 1, même si celle-ci avait manifesté peu d'empressement jusque-là et que les travaux de terrassement en cours avaient été confiés à une autre entreprise. Comme les parties devaient encore s'entendre sur le taux de rémunération de l'entrepreneur général par rapport au coût total des travaux hors taxes, l'intimée a formulé une proposition, soit 2%.
La teneur exacte de la réunion du 6 juin 2014 n'est pas établie. En tous les cas, les pourparlers n'ont pas avancé ce jour-là. Le même jour, le conseil de l'intimée a mis les recourantes en demeure de revenir sans délai à la table des négociations.
La recourante n° 1 n'a pas obtempéré mais, par pli du 10 juin 2014 de son conseil, elle a déclaré ne pas disposer des éléments nécessaires pour établir un projet de contrat d'entreprise générale et a fixé à l'intimée un délai au 12 juin 2014 pour formuler une proposition de contrat complète et détaillée, accompagnée de toute pièce utile.
Dans sa réponse du 13 juin 2014, le conseil de l'intimée a fait valoir que c'était à l'entrepreneur général d'établir le projet de contrat d'entreprise générale et il a réitéré la proposition d'un taux de rémunération à 2%, le coût total des travaux étant estimé à 30 millions de francs; les recourantes étaient sommées de fournir un projet de contrat d'entreprise générale dans les 48 heures, après avoir, le cas échéant, demandé à l'intimée les pièces et informations nécessaires. Faute de réaction, l'intimée a répété sa sommation le 23 juin 2014, fixant un ultime délai au lendemain.
Le 24 juin 2014, le conseil des recourantes a transmis au conseil de l'intimée des projets de contrat d'entreprise générale standards et vierges.
Au regard de l'enchaînement de ces événements, il n'apparaît pas que la bénéficiaire du précontrat ait cherché de bonne foi à conclure un contrat d'entreprise générale avec l'intimée. Dans un premier temps, elle n'a pas répondu, ou alors tard, aux invitations de l'intimée, désireuse à juste titre de commencer le chantier rapidement. Une fois les travaux de terrassement lancés, la recourante n° 1 a certes voulu les interrompre, manifestant par là qu'elle était encore intéressée au contrat d'entreprise générale. Mais ensuite, face à la volonté réaffirmée de l'intimée de conclure le contrat, elle a adopté une attitude passive et peu coopérative lors des pourparlers.
Elle n'est pas revenue à la table des discussions, malgré l'invitation expresse de l'intimée. Elle n'a jamais pris position sur le taux de rémunération de 2% proposé par le futur maître d'ouvrage. Se bornant à renvoyer la balle à l'intimée, elle a refusé de lui remettre un projet de contrat d'entreprise générale, qu'elle était pourtant à même de rédiger en tant qu'entrepreneur général et qui, en première version, aurait dû servir de base aux discussions. L'absence de pièces fournies par le futur maître d'ouvrage apparaît ici comme un prétexte, la recourante n° 1 n'ayant jamais pris contact avec l'intimée pour lui indiquer de quoi elle avait besoin, ni lui demander des renseignements. Preuve en est du reste que, lorsqu'elle a finalement, après deux sommations, présenté des projets de contrat d'entreprise générale, elle ne s'est même pas donné la peine d'y inscrire le nom des parties et l'intitulé du chantier, faisant ainsi clairement douter de sa volonté de trouver un terrain d'entente avec l'intimée.
Sur la base de ces éléments, la cour cantonale pouvait, sans abuser de son pouvoir d'appréciation, juger que la recourante n° 1 avait contribué très largement à ce que l'intimée renonçât en définitive à conclure avec elle un contrat d'entreprise générale. En d'autres termes, l'intimée disposait bien de justes motifs pour se départir de la clause d'entrepreneur, de sorte qu'elle n'a pas à verser à la recourante n° 1 l'indemnisation complète prévue par l'art. 377 CO.
6.
Sur le vu de ce qui précède, le recours se révèle mal fondé.
Les recourantes, débitrices solidaires, prendront à leur charge les frais judiciaires (art. 66 al. 1 et 5 LTF) et verseront des dépens à l'intimée (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 à 19'000 fr., sont mis solidairement à la charge des recourantes.
3.
Les recourantes, débitrices solidaires, verseront à l'intimée une indemnité de 21'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 29 juillet 2020
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann