{"id":102359,"date":"2019-03-25T07:00:00","date_gmt":"2019-03-25T14:00:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/oldnewthing\/?p=102359"},"modified":"2019-06-06T17:37:29","modified_gmt":"2019-06-07T00:37:29","slug":"20190325-00","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20190325-00\/?p=102359","title":{"rendered":"What does the N in nmake stand for?"},"content":{"rendered":"<p>The Visual Studio toolchain comes with a tool called <code>nmake<\/code>. It processes files in roughly the same way as the traditional Unix <code>make<\/code> tool. Why is it called <code>nmake<\/code> instead of just <code>make<\/code>? <\/p>\n<p>Rewind back to the late 1980&#8217;s. The Microsoft languages toolchain&sup1; included a <code>make<\/code> program which we will generously describe as <i>vaguely inspired by<\/i> the Unix <code>make<\/code> tool: It processed files that looked like Makefiles, but its dependency calculations were nowhere near as sophisticated as the original Unix <code>make<\/code> program. As a result, you had to play games with the order of evaluation in order to get everything built in the correct order. <\/p>\n<p>This woefully inadequate <code>make<\/code> program was the source of much dissatisfaction. A developer was selected to reimplement <code>make<\/code> from the ground up using a <a HREF=\"https:\/\/en.wikipedia.org\/wiki\/Clean_room_design\">clean room design<\/a>, working only from the makefile specification without any access to the Unix source code. <\/p>\n<p>To distinguish the new version from the old and busted version, she gave the new version the name <i>New Make<\/i>, or <code>nmake<\/code>. <\/p>\n<p>It&#8217;s a tribute to the success of the new version that everybody has forgotten that there was an old and busted version to begin with. <\/p>\n<p><b>Bonus chatter<\/b>: What about <code>MASM<\/code>? What does the M stand for? <\/p>\n<p>That one&#8217;s easier. The M stands for Macro. It&#8217;s the Microsoft Macro Assembler. What made it different from plain old <code>ASM<\/code> was the fact that it supported macros. <\/p>\n<p>&sup1; The name <i>Visual Studio<\/i> wouldn&#8217;t come onto the scene until a decade later. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>It&#8217;s old now, but at the time, it was new.<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[2],"class_list":["post-102359","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-history"],"acf":[],"blog_post_summary":"<p>It&#8217;s old now, but at the time, it was new.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/102359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=102359"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/102359\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=102359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=102359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=102359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}