Sharhlardagi o'zgarishlarni e'tiborsiz qoldirish uchun C ++ sozlamalarini o'rnating

O'rnatish zanjirini sharhlardagi (yoki bo'shliqlarda) o'zgarishlarni e'tiborsiz qoldiradigan tarzda tuzish mumkinmi? Misol uchun, nom fayliidagi sharh o'zgarganda har qanday manba fayli uni to'liq qayta tiklanmaydi.

Dastlabki protsessor o'zgartirilgan fayldan izohlarni olib tashlash bilan tugatilganida, qurish zanjiri dastlab chiqishni aslida o'zgartirganligini tekshirishi mumkin. Aks holda, faylning o'zi o'zgargani kabi harakat qilish kerak.

Visual Studio 2010 btw dan foydalanmoqdaman.

Tartibga solish: @MikeSeymour, VS ning cl.exe-da minimal qayta qurish uchun kalit/Gm mavjud. Bu yaxshi hujjat emas, lekin men shuni so'rayapman. Ammo bir nechta yadrolarni ishlatish uchun MP/MP switch bilan mos kelmaydi. Mening ikki yadroli (w/hyperthreading),/Gm uchun o'rtacha 4 birlikdan 3-chi derazani o'tkazib yuborish kerak. Men buning shubhali ekanligiga qaramay,/Gm qiymatiga teng yoki yo'qligini qanday baholashni bilmayman.

10
Buning qiyin bo'lishi mumkin, chunki tuzish tizimi faylni va keyin nusxasidan oldin solishtirib, faqatgina keyin mavjud.
qo'shib qo'ydi muallif Mark Ransom, manba
@MarkRansom: Lekin oraliq sarlavhani sharhlarsiz keshlash juda ahamiyatsiz bo'lishi kerak
qo'shib qo'ydi muallif Christopher Oezbek, manba
Qiziqarli. Siz asosan maqsadni ishlaydigan kengaytirilgan tuzilish tizimini istaysiz, natijada mavjud fayl bilan natija bilan taqqoslanadi va ular bir xil bo'lsa, emas ustiga yoziladi. Keyinchalik, siz oldindan tayyorlov bosqichini alohida maqsadga ajratish bilan birlashtirasiz va siz bajarasiz. Yaxshi xususiyat bo'lardi!
qo'shib qo'ydi muallif Kerrek SB, manba
Men Visual Studio'ning baribir bu ishni bajarayotgani haqida tasavvurga ega emasman - o'ylaymanki, u "bir nechta o'zgarishlarni e'tiborsiz qoldirish" kabi xabarlarni ishlab chiqaradi. Biroq men noto'g'ri bo'lishi mumkin. Boshqa tuzilish platformalari uchun ccache bilan kerakli narsani amalga oshiring.
qo'shib qo'ydi muallif Mike Seymour, manba
@MikeSeymour: ccache sharhlar tashqarisidagi bo'sh joy o'zgarishlarini qayta tiklashni oldini oladi (va to'g'ri IMO)
qo'shib qo'ydi muallif sehe, manba
Xoreax Incredibuild siz tasvirlagan xususiyatni (lar) qo'llab-quvvatlashi mumkin. bajarmaydi , baribir, yerga o'rnatilgan protsessor bilan birga keladi
qo'shib qo'ydi muallif sehe, manba

3 javoblar

Ha. Agar ba'zi asoslar haqiqat bo'lsa, voqealarni qurishda tetiklash imkonini beruvchi qurilish tizimiga ega bo'lishingiz kerak. Sizga nima kerak bo'lsa, "bu fayl semantically qiziqarli tarzda o'zgartirildi" degan iboradir.

Bunday predmetni yaxshi taqqoslash bizning manbani taqqoslaydigan SmartDifferencers oilasi shaklida mavjud. kod fayllari, chuqur bilimlardan foydalanish (masalan, ishlab chiqarishning ajralmas qismi). Xususan, SmartDifferencer tillardagi tuzilmalar (masalan, identifikatorlar, bayonotlar, deklaratsiyalar, bloklar) va maqbul tartibga solish harakatlariga (qo'shish, almashtirish, o'chirish, ko'chirish, nomini o'zgartirish, nomini o'zgartirish va boshqalar) manba kodidagi o'zgarishlarni ko'rsatadi. .). Bu tartib yoki izohlarga qiziqmaydi (agar uni majbur qilmasangiz). Shunday qilib, SmartDifferencerni manba kodi fayllari sharhlar yoki bo'sh joydan boshqa biror narsa o'zgartirganmi yoki yo'qligini aniqlab olish juda oson. SmartDifferencers turli xil tillar uchun mavjud.

Endi, siz qurish tizimini qanday qilib hamkorlik qilishingiz mumkin? Unix Tizimlarni tsiklni ishga tushiring, lekin bunday emas; aslida nima sodir bo'lishidan qat'i nazar, maqsadlarga nisbatan fayllar tarixining yangi bosqichiga asoslangan ob'ektlardagi voqealarni yaratishni boshlashdir. SmartDifferencer qiziqarli farqni ko'rsatsa, bunday faylni ishlab chiqarib, "changed_signal" fayliga bog'liqligini tanlab olishingiz mumkin.

2
qo'shib qo'ydi
Yaxshi, xato ayıklayıcı bo'lsa, juda oson. Dastlabki faylda chiziqli raqamlarni ajratish nuqtalarini xaritada ko'rsatish. Siz o'zboshimchalik bilan chiziqlar qo'shasiz; ID, "N chiziqlari oldingi M yo'nalishiga qo'shilgan" degan jadvalni tuzadi. Keling, biron-bir qadr-qimmatini yo'qotish nuqtasi raqamini zamonaviy chiziqli raqam bilan bog'lash mumkin. IDE ushbu jadvalni uzoq vaqt davomida kuzatishi mumkinmi, boshqa masala - MS Visual Studio yordamida disk raskadrovka seanslari davomida juda yaxshi ishlashimga juda yaxshi ta'sir qildi. IDE-ning chaqiruvi davomida qanday ishlashi esimda.
qo'shib qo'ydi muallif Ira Baxter, manba
SmartDifferencer "VSStudio" ga integratsiyalashganmi? ... men javobni bilmayman, biz bu qadamga etmaymiz. Buyruqlar satridan chaqirishga imkon beradigan vosita va xato kodlarini qaytaradi. VSStudio bu kabi vositalarni ishlatishga ruxsat beradi deb o'ylayman. Buni qurish jarayoniga siz tasvirlab bergan usulni qo'shishingiz mumkinmi ... Men hech qachon MSVisual Studio qanday qilib bugungi kunda qurilish bosqichlarini boshqarayotganiga qaramaganman. Gap shundaki, u fayllarni yaratish kabi (NMake ismli biror narsaga pushaymon qilish uchun milodiy foydalanmaganmi?), Bu mumkin bo'lishi kerak kabi ko'rinadi.
qo'shib qo'ydi muallif Ira Baxter, manba
Yaxshi, bu men uchun so'ragan narsalardan ham ko'proq. Hatto juda ko'p bo'lishi mumkin. Bo'shgina chiziqni "faqat" kiritishini tasavvur qiling: Qanday qilib tuzatuvchi bu chiziqdan keyingi har bir alohida nuqtani birma-bir o'chirilganligini bilishi kerak edi? Ushbu SmartDifferencerni va boshqalar 2010 bilan integratsiya qilish mumkinmi?
qo'shib qo'ydi muallif Andreas Haferburg, manba

Yo'q.

Derivat faylga kiritilgan yagona o'zgarishlarni kompilyatsiya qilmagunga qadar ushbu faylga qadar izohlarda bo'lganligini qanday bilishi mumkin?

So'ngra, fayllar bir-biriga o'xshash bo'lsa ham, keyingi fayllar o'zgartirilishi kerak.

0
qo'shib qo'ydi
Sharhlardagi o'zgarishlarni faqat oldindan ko'rib chiqish va tuzish yo'li bilan e'tiborsiz qoldirish mumkin; bu ccache ga tegishli. Men Visual Studio'ning shunga o'xshash ishlarni bajarayotgani haqida tasavvurga ega emasman (ba'zida "noaniq o'zgarishlarni e'tiborsiz qoldirish" satrlari bo'ylab xabarlarni yozishadi deb o'ylayman), lekin men buni qo'llaganimdan beri ancha vaqt.
qo'shib qo'ydi muallif Mike Seymour, manba
OP, bir .hpp faylida sharhning o'zgarishi yuzlab .cpp faylni qayta nomlashiga olib kelishi mumkin, deb nomlangan. Ha .hpp o'zgarishlarni tekshirish uchun qayta ko'rib chiqilishi kerak, ammo o'zgarish aniqlanmagan bo'lsa, u holda barcha .cpp fayllarini qayta yozib olishingiz mumkin. Buning imkoni bo'lmaydigan yagona narsa, /* bilan .hpp bilan yakunlangan va keyin */ faylni shu jumladan, nodir narsalarni qilganda. (buni hatto qila olmaysiz!)
qo'shib qo'ydi muallif tenfour, manba

Ko'p o'zaro bog'liqliklarning oldini olish uchun ko'plab texnikalar mavjud. Oldinga deklaratsiya orqali harakat qilib ko'ring.

Oldinga deklaratsiya yordamida siz faqat kodni ishlatadigan kodni kompilyatsiya qilishingiz kerak. Scott Myers kitobida sizga ko'proq ma'lumot berilishi mumkin. Bu borada juda oz sonli sahifalar bor.

0
qo'shib qo'ydi
Ehtimol savolga javob bera olmaganligi sababli, sharhga yaxshi javob berishi mumkin.
qo'shib qo'ydi muallif Christian Rau, manba
Ehtimol, lekin aslida bu savol butunlay boshqacha. Albatta, oldinga deklaratsiyalar yaxshi fikr, ammo uning savoliga javob emas.
qo'shib qo'ydi muallif Christian Rau, manba
Xristian - men bir faylni o'zgartirishni boshqa fayllar to'plashni talab qiladigan degan fikrga keldim.
qo'shib qo'ydi muallif Ed Heal, manba
Rahmat Ed. Siz haqsiz, oldingi deklaratsiyalar va Pimpl so'zlari kabi vositalar juda foydali. Ammo - hech bo'lmaganda qog'ozda - asboblar zanjirini o'zgartirish bizning ishlab chiquvchilarimizning kodini va/yoki fikrini o'zgartirgandan ko'ra ancha osonroq. :)
qo'shib qo'ydi muallif Andreas Haferburg, manba