{"id":5373,"date":"2007-11-01T13:37:00","date_gmt":"2007-11-01T13:37:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2007\/11\/01\/visual-studio-build-process-vc-libraries-and-check-in-process\/"},"modified":"2019-02-18T18:54:18","modified_gmt":"2019-02-18T18:54:18","slug":"visual-studio-build-process-vc-libraries-and-check-in-process","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/visual-studio-build-process-vc-libraries-and-check-in-process\/","title":{"rendered":"Visual Studio Build Process, VC++ Libraries and Check-in Process"},"content":{"rendered":"<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Hi again.&nbsp;My name is Ale Contenti and I&rsquo;m the dev lead of the VC++ Libraries team. You&nbsp;might have see&nbsp;me previously in my <\/font><a href=\"https:\/\/channel9.msdn.com\/Showpost.aspx?postid=343189\"><font face=\"Calibri\" size=\"3\">channel9<\/font><\/a><font face=\"Calibri\" size=\"3\"> interviews. I&rsquo;m now in Italy for a short vacation and I&rsquo;ll be in Barcelona for TechEd starting from Nov 5. I&rsquo;m really excited to go there and mingle with a lot of VC++ and Visual Studio users! After TechEd, Steve Teixeira (Group Program Manager for Visual C++)&nbsp;and I will be in Munich, Germany to meet with customers.<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Today I want to talk about how we check-in changes to the VC++ Libraries, and how the libraries are used by the rest of VC++ and Visual Studio.<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">You maybe know that the entire Visual Studio is built in our lab every night starting at 9pm (Fri &amp; Sat night excluded, usually). The VC++ Libraries are among the first things that are built. Why? Because these libraries are immediately used by the rest of the Visual Studio components!<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">One of the first libraries built is the C-RunTime (or CRT). The CRT consists of three main parts:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">The header files (like stdio.h)<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">The import libraries (like msvcrt.lib)<\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">The DLLs (like msvcr90.dll)<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">We build these three parts and publish them to a binaries output folder, more or less like it happens for a normal VC++ project.<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Additionally, the header files and the import libraries are &ldquo;published&rdquo; to another folder. The rest of Visual Studio components (e.g. the VC++ compiler cl.exe or the C# compiler csc.exe) are built using these newly published include files and import libraries.<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">This has a few interesting implications:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">The entire Visual Studio is always built with the latest VC++ Libraries (CRT, STL, ATL and MFC)<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">The entire Visual Studio will load the latest VC++ DLLs at runtime<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">If there is a regression in the VC++ Libraries (for example an issue in a widely used functionality), the effects will be seen in the rest of Visual Studio as well<\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Each change to the VC++ Libraries headers and libs need to be carefully tested to make sure the build is not broken and the Visual Studio components work correctly<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">To make sure each VC++ Library check-in will not break the rest of Visual Studio we rely on:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">An extensive set of regression tests<\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">An automatic check-in system which ensures there are no build breaks and no test failures<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">The regression tests are usually updated with the unit tests which accompany the code changes.<\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">The automatic check-in system uses more than 20 machines to build different parts of Visual Studio and then run a lot of tests targeting the newly built binaries. When everything looks ok (build and tests) the automatic system (we call it &ldquo;the gauntlet&rdquo; <\/font><span><span>J<\/span><\/span><font face=\"Calibri\">) will take care of checking-in the changes and send mail with the check-in details.<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">I hope this was interesting and ins\nightful. Let me know if you have any question\/comment.<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Ale Contenti<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">VC++ Libraries Dev Lead<\/font><\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi again.&nbsp;My name is Ale Contenti and I&rsquo;m the dev lead of the VC++ Libraries team. You&nbsp;might have see&nbsp;me previously in my channel9 interviews. I&rsquo;m now in Italy for a short vacation and I&rsquo;ll be in Barcelona for TechEd starting from Nov 5. I&rsquo;m really excited to go there and mingle with a lot of [&hellip;]<\/p>\n","protected":false},"author":289,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-5373","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus"],"acf":[],"blog_post_summary":"<p>Hi again.&nbsp;My name is Ale Contenti and I&rsquo;m the dev lead of the VC++ Libraries team. You&nbsp;might have see&nbsp;me previously in my channel9 interviews. I&rsquo;m now in Italy for a short vacation and I&rsquo;ll be in Barcelona for TechEd starting from Nov 5. I&rsquo;m really excited to go there and mingle with a lot of [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/5373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/289"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=5373"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/5373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=5373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=5373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=5373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}