{"id":4856,"date":"2022-04-10T02:01:44","date_gmt":"2022-04-09T18:01:44","guid":{"rendered":"https:\/\/blog.iyatt.com\/?p=4856"},"modified":"2024-05-05T14:19:15","modified_gmt":"2024-05-05T06:19:15","slug":"make-%e5%b7%a5%e5%85%b7%e7%9a%84%e4%bd%bf%e7%94%a8","status":"publish","type":"post","link":"https:\/\/blog.iyatt.com\/?p=4856","title":{"rendered":"make \u5de5\u5177\u7684\u4f7f\u7528"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.iyatt.com\/?p=4856\/#%E7%BC%96%E8%AF%91%E5%B7%A5%E5%85%B7%E9%93%BE%E5%AE%89%E8%A3%85\" >\u7f16\u8bd1\u5de5\u5177\u94fe\u5b89\u88c5<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.iyatt.com\/?p=4856\/#GNU_%E7%BC%96%E8%AF%91%E5%99%A8%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E9%80%89%E9%A1%B9%E4%BB%8B%E7%BB%8D\" >GNU \u7f16\u8bd1\u5668\u7684\u4e00\u4e9b\u5e38\u7528\u9009\u9879\u4ecb\u7ecd<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.iyatt.com\/?p=4856\/#%E4%B8%80%E4%B8%AA%E5%A4%9A%E6%BA%90%E7%A0%81%E6%96%87%E4%BB%B6%E5%B7%A5%E7%A8%8B%E7%A4%BA%E4%BE%8B\" >\u4e00\u4e2a\u591a\u6e90\u7801\u6587\u4ef6\u5de5\u7a0b\u793a\u4f8b<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.iyatt.com\/?p=4856\/#make_%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F\" >make \u4e2d\u7684\u53d8\u91cf<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.iyatt.com\/?p=4856\/#%E6%90%9C%E7%B4%A2%E8%B7%AF%E5%BE%84\" >\u641c\u7d22\u8def\u5f84<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.iyatt.com\/?p=4856\/#%E8%87%AA%E5%8A%A8%E6%8E%A8%E5%AF%BC\" >\u81ea\u52a8\u63a8\u5bfc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.iyatt.com\/?p=4856\/#%E9%80%92%E5%BD%92_make\" >\u9012\u5f52 make<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.iyatt.com\/?p=4856\/#make_%E4%B8%AD%E7%9A%84%E5%87%BD%E6%95%B0\" >make \u4e2d\u7684\u51fd\u6570<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>\u5728 Linux \u4e0b\u641e C\/C++ \u7f16\u7a0b\u5f00\u53d1\uff0c\u6700\u4e3a\u5e38\u7528\u7684\u7f16\u8bd1\u5de5\u5177\u4e3a GNU \u7f16\u8bd1\u5668\uff08gcc\/g++\uff09\u3002\u5bf9\u4e8e\u5f88\u591a\u521d\u5b66\u8005\u800c\u8a00\uff0c\u5199\u4e86\u4ee3\u7801\u53ef\u80fd\u5c31\u6572\u547d\u4ee4\u7f16\u8bd1\uff0c\u8fd9\u5f88\u6b63\u5e38\u3002\u4f46\u662f\u5f53\u8fdb\u884c\u4e00\u4e2a\u8f83\u5927\u7684\u5de5\u7a0b\u7684\u65f6\u5019\uff0c\u4ee3\u7801\u6587\u4ef6\u6210\u767e\u4e0a\u5343\uff0c\u8fd9\u4e2a\u65f6\u5019\u90fd\u8fd8\u662f\u6572 gcc \u547d\u4ee4\u7f16\u8bd1\uff1f\u8c03\u8bd5\u7684\u65f6\u5019\uff0c\u6709\u65f6\u5019\u53ea\u6539\u4e86\u4e00\u4e2a\u4ee3\u7801\u6587\u4ef6\uff0c\u4e5f\u8981\u6240\u6709\u4ee3\u7801\u90fd\u91cd\u65b0\u7f16\u8bd1\u4e00\u904d\uff1f\u8fd9\u4e2a\u65f6\u5019\u76f4\u63a5\u7528 gcc \u547d\u4ee4\u5c31\u4f1a\u663e\u5f97\u529b\u4e0d\u4ece\u5fc3\u4e86\u3002<\/p>\n\n\n\n<p>\u90a3\u4e48\u8fd9\u91cc\u5c31\u5f15\u5165 make \u7684\u4ecb\u7ecd\u3002make \u5de5\u5177\u672c\u8eab\u7c7b\u4f3c\u4e8e\u4e00\u5957\u811a\u672c\u6267\u884c\u5668\uff0c\u4f9d\u6258\u4e8e Makefile \u6587\u4ef6\u6267\u884c\u3002\u5728 Makefile \u4e2d\u7f16\u5199\u4e00\u5b9a\u7684\u89c4\u5219\uff0cmake \u6839\u636e Makefile \u4e2d\u7684\u8981\u6c42\u53bb\u8c03\u7528\u76f8\u5173\u7684\u5de5\u5177\u6267\u884c\u5de5\u7a0b\u7684\u6784\u5efa\u3002\u5e76\u4e14\u4e0d\u4ec5\u9650\u4e8e\u7b80\u5355\u7684\u7f16\u8bd1\uff0c\u5728\u6267\u884c\u7f16\u8bd1\u524d\u4f1a\u68c0\u67e5\u6587\u4ef6\u65f6\u95f4\u6233\uff0c\u518d\u4e00\u6b21\u7f16\u8bd1\u65f6\u53d1\u73b0\u6709\u6e90\u7801\u6587\u4ef6\u7684\u65f6\u95f4\u65b0\u4e8e\u76ee\u6807\u6587\u4ef6\u624d\u4f1a\u91cd\u65b0\u7f16\u8bd1\uff0c\u5426\u5219\u6cbf\u7528\u65e7\u7684\uff0c\u5bf9\u4e8e\u5de5\u7a0b\u7684\u6784\u5efa\u4e5f\u8282\u7701\u4e86\u4e00\u5b9a\u7684\u65f6\u95f4\u3002<\/p>\n\n\n\n<p>Windows \u4e0b Visual Studio\uff08VS\uff09\u4e5f\u5305\u542b\u4e86\u4e00\u4e2a\u548c make \u7c7b\u4f3c\u7684\u5de5\u5177\uff0c\u53eb\u505a nmake\uff0cMakefile \u6587\u4ef6\u7684\u7f16\u5199\u89c4\u5219\u548c make \u4e5f\u6709\u5927\u534a\u662f\u76f8\u4f3c\u7684\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E7%BC%96%E8%AF%91%E5%B7%A5%E5%85%B7%E9%93%BE%E5%AE%89%E8%A3%85\"><\/span>\u7f16\u8bd1\u5de5\u5177\u94fe\u5b89\u88c5<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u9488\u5bf9 Debian \u7cfb Linux\uff0c\u5373\u4f7f\u7528 apt \u5b89\u88c5\u5305\u7ba1\u7406\u5de5\u5177\u7684\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt update\nsudo apt install -y build-essential<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"GNU_%E7%BC%96%E8%AF%91%E5%99%A8%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E9%80%89%E9%A1%B9%E4%BB%8B%E7%BB%8D\"><\/span>GNU \u7f16\u8bd1\u5668\u7684\u4e00\u4e9b\u5e38\u7528\u9009\u9879\u4ecb\u7ecd<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u9009\u9879\u5b98\u65b9\u6587\u6863\uff1a<a rel=\"noreferrer noopener\" href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Instrumentation-Options.html\" target=\"_blank\">https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Instrumentation-Options.html<\/a><\/p>\n\n\n\n<p>-Wall \u9009\u9879<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>-Wchar-subscripts \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u6570\u7ec4\u7684\u4e0b\u6807\u503c\uff0c\u5982\u679c\u4e0b\u6807\u503c\u662f char \u5219\u7ed9\u51fa\u8b66\u544a\u3002\u56e0\u4e3a\u5728\u4e00\u4e9b\u5e73\u53f0\u4e0a\uff0cchar \u7c7b\u578b\u7684\u53d8\u91cf\u53ef\u80fd\u5b9a\u4e49\u4e3a signed char\uff08\u6709\u7b26\u53f7\u6574\u6570\uff09\uff0c\u6240\u4ee5\u7528 char \u7c7b\u578b\u7684\u53d8\u91cf\u505a\u4e0b\u6807\u7684\u65f6\u5019\uff0c\u5982\u679c\u4e0b\u6807\u503c\u4e3a\u8d1f\u6570\u53ef\u80fd\u4f1a\u9020\u6210\u5185\u5b58\u6ea2\u51fa\u3002<\/li><li>-Wcomment \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u4ee3\u7801\u4e2d\u7684\u6ce8\u91ca\uff0c\u5728\u51fa\u73b0\u4e0d\u5408\u9002\u7684\u6ce8\u91ca\u683c\u5f0f\u7684\u65f6\u5019\u4f1a\u51fa\u73b0\u8b66\u544a\u3002\u4f8b\u5982\u5728 \u201c\/* &#8230; *\/\u201d \u4e2d\u95f4\u51fa\u73b0 \u201c\/*\u201d\uff0c\u6216\u8005\u5728 &#8220;\/\/ &#8230;&#8221; \u6ce8\u91ca\u7684\u672b\u5c3e\u51fa\u73b0\u201c\\\u201d \u7684\u65f6\u5019\uff0c\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wformat \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u8f93\u5165\u8f93\u51fa\u7684\u683c\u5f0f\uff0c\u68c0\u67e5 printf \u548c scanf \u7b49\u683c\u5f0f\u5316\u8f93\u5165\u8f93\u51fa\u51fd\u6570\u7684\u683c\u5f0f\u5b57\u7b26\u4e32\u4e0e\u53c2\u6570\u7c7b\u578b\u7684\u5339\u914d\u60c5\u51b5\uff0c\u5982\u679c\u4e0d\u5339\u914d\u5c31\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wimplicit \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u53c2\u6570\u7684\u58f0\u660e\uff0c\u96c6\u5408\u4e86 -Wimplicit-int \u548c -Wimplicit-function-declaration \u4e24\u4e2a\u9009\u9879\u3002\u7b2c\u4e00\u4e2a\u9009\u9879\u5728\u58f0\u660e\u51fd\u6570\u65f6\uff0c\u5982\u679c\u6ca1\u6709\u6307\u5b9a\u8fd4\u56de\u503c\u5c31\u7ed9\u51fa\u8b66\u544a; \u7b2c\u4e8c\u4e2a\u53c2\u6570\u5982\u679c\u5728\u58f0\u660e\u524d\u8c03\u7528\u51fd\u6570\u5c31\u7ed9\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wmissing-braces \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u7ed3\u6784\u7c7b\u578b\u6216\u8005\u6570\u7ec4\u521d\u59cb\u5316\u65f6\u7684\u4e0d\u5408\u9002\u683c\u5f0f\uff0c\u5982 int array[2][2] = {0, 0, 1, 1}; \u7531\u4e8e\u521d\u59cb\u5316\u7684\u8868\u8fbe\u5f0f\u6ca1\u6709\u5145\u5206\u7528 {} \u62ec\u8d77\u6765\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\uff0c\u6b63\u786e\u5e94\u8be5\u91c7\u7528\u4e0b\u9762\u7684\u5b9a\u4e49\u65b9\u6cd5\uff1aint array[2][2] = {{0, 0}, {1, 1}};<\/li><li>-Wparentheses \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u591a\u79cd\u4f18\u5148\u7ea7\u7684\u64cd\u4f5c\u7b26\u5728\u4e00\u8d77\u6216\u8005\u4ee3\u7801\u7ed3\u6784\u96be\u4ee5\u770b\u660e\u767d\u7684\u64cd\u4f5c\uff0c\u5982\u679c\u6ca1\u6709\u5c06\u64cd\u4f5c\u8fdb\u884c\u660e\u786e\u5730\u5206\u79bb\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002\u4f8b\u5982 if (a &amp;&amp; b || c)\u4e2d\u7684\u4e09\u4e2a\u53d8\u91cf a\u3001b \u548c c \u7684\u64cd\u4f5c\u987a\u5e8f\u5e94\u8be5\u7528\u62ec\u53f7\u5206\u79bb\u3002<\/li><li>-Wsequence-point \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u987a\u5e8f\u70b9\uff0c\u5982\u679c\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528\u4e86\u6709\u53ef\u80fd\u9020\u6210\u987a\u5e8f\u70b9\u53d8\u5316\u7684\u8bed\u53e5\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002\u4f8b\u5982\uff0c\u4ee3\u7801 i=i++ \u5728\u4e0d\u540c\u7684\u7f16\u8bd1\u5668\u4e0a\u5f97\u5230\u7684\u7ed3\u679c\u4f1a\u4e0d\u540c\uff08\u6807\u51c6\u4e2d\u6ca1\u6709\u89c4\u5b9a\u987a\u5e8f\uff0c\u5b9e\u9645\u987a\u5e8f\u7531\u7f16\u8bd1\u5668\u51b3\u5b9a\u3002\u6807\u51c6\u4e2d\u672a\u89c4\u5b9a\u7684\u884c\u4e3a\u4e00\u822c\u79f0\u4e3a\u672a\u5b9a\u4e49\u884c\u4e3a &#8211; undefined behavior\uff0c\u7b80\u79f0 UB)\uff0c\u5982\u679c\u4f7f\u7528\u4e86\u8fd9\u6837\u7684\u4ee3\u7801\u5c31\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wswitch \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9 switch \u8bed\u53e5\uff0c\u5982\u679c\u4e00\u4e2a switch \u8bed\u53e5\u4e2d\u6ca1\u6709\u6dfb\u52a0 default \u6761\u4ef6\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wunused \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u4ee3\u7801\u4e2d\u6ca1\u6709\u7528\u5230\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u503c\u3001\u8df3\u8f6c\u70b9\u7b49\uff0c\u5b83\u662f -Wunused-function\u3001-Wunused-label\u3001-Wunused-variable\u3001-Wunused-value \u9009\u9879\u7684\u96c6\u5408\u3002-Wunused-function \u8b66\u544a\u4ee3\u7801\u4e2d\u6ca1\u6709\u4f7f\u7528\u7684\u9759\u6001\u51fd\u6570\uff0c\u6216\u8005\u53ea\u5b9a\u4e49\u5374\u6ca1\u6709\u5b9e\u73b0\u7684\u9759\u6001\u51fd\u6570\u3002-Wunused-label \u8b66\u544a\u4ee3\u7801\u4e2d\u5b9a\u4e49\u4e86\u5374\u6ca1\u6709\u4f7f\u7528\uff0c\u6216\u8005\u4f7f\u7528\u4e86\u5374\u6ca1\u6709\u5b9a\u4e49\u7684\u6807\u7b7e\u3002-Wunused-variable \u8b66\u544a\u4ee3\u7801\u4e2d\u5b9a\u4e49\u4e86\u5374\u6ca1\u6709\u4f7f\u7528\u7684\u5c40\u90e8\u53d8\u91cf\u3002-Wunused-value \u8b66\u544a\u4ee3\u7801\u4e2d\u8ba1\u7b97\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u6ca1\u6709\u4f7f\u7528\u3002<\/li><li>-Wunused-parameter \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u51fd\u6570\u53c2\u6570\uff0c\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u5728\u51fd\u6570\u5b9e\u73b0\u4e2d\u6ca1\u6709\u4f7f\u7528\u5230\uff0c\u7f16\u8bd1\u5668\u5c31\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wuninitialized \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u6ca1\u6709\u521d\u59cb\u5316\u53d8\u91cf\u7684\u4f7f\u7528\uff0c\u5982\u679c\u4e00\u4e2a\u5c40\u90e8\u53d8\u91cf\u5728\u4f7f\u7528\u4e4b\u524d\u6ca1\u6709\u521d\u59cb\u5316\uff0c\u7f16\u8bd1\u5668\u5c31\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><\/ul>\n\n\n\n<p>\u975e -Wall \u9009\u9879<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>-Wflot-equal \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u6d6e\u70b9\u503c\u76f8\u7b49\u7684\u5224\u5b9a\uff0c\u7531\u4e8e\u6d6e\u70b9\u503c\u7684\u786e\u5207\u503c\u96be\u4ee5\u5f97\u77e5\uff0c\u6240\u4ee5\u5982\u679c\u6d6e\u70b9\u503c\u51fa\u73b0\u5728\u76f8\u7b49\u5224\u5b9a\u7684\u8868\u8fbe\u5f0f\u4e2d\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002\u6d6e\u70b9\u503c\u7684\u76f8\u7b49\u5224\u5b9a\u53ef\u4ee5\u7528\u6d6e\u70b9\u503c\u7684\u5dee\u4e0e\u67d0\u4e2a\u5c0f\u503c\u6bd4\u8f83\u5224\u5b9a\uff0c\u6bd4\u5982\u6211\u8ba4\u4e3a\u4e24\u4e2a\u6d6e\u70b9\u6570\u7684\u5dee\u7684\u7edd\u5bf9\u503c\u5c0f\u4e8e 0.000001 \u5c31\u662f\u76f8\u7b49\u3002<\/li><li>-Wshadow \u8fd9\u4e2a\u9009\u9879\u7528\u4e8e\u5c40\u90e8\u53d8\u91cf\u4f5c\u7528\u57df\u5185\u7684\u540c\u540d\u53d8\u91cf\uff0c\u5982\u679c\u5c40\u90e8\u53d8\u91cf\u7684\u4f5c\u7528\u57df\u8303\u56f4\u5185\u6709\u5176\u5b83\u540c\u540d\u53d8\u91cf\u65f6\uff0c\u5c40\u90e8\u53d8\u91cf\u4f1a\u906e\u853d\u5168\u5c40\u53d8\u91cf\uff0c\u6b64\u65f6\u7f16\u8bd1\u5668\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wbad-function-cast \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u51fd\u6570\u7684\u8fd4\u56de\u503c\uff0c\u5f53\u51fd\u6570\u7684\u8fd4\u56de\u503c\u8d4b\u7ed9\u4e0d\u5339\u914d\u7684\u7c7b\u578b\u65f6\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wsign-compare \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u6709\u7b26\u53f7\u6570\u548c\u65e0\u7b26\u53f7\u6570\u7684\u6bd4\u8f83\uff0c\u7531\u4e8e\u65e0\u7b26\u53f7\u6570\u7684\u4f18\u5148\u7ea7\u6bd4\u6709\u7b26\u53f7\u6570\u7684\u4f18\u5148\u7ea7\u9ad8\uff0c\u4e8c\u8005\u8fdb\u884c\u6bd4\u8f83\u8fd0\u7b97\u7684\u65f6\u5019\uff0c\u4f1a\u5148\u5c06\u6709\u7b26\u53f7\u6570\u8f6c\u4e3a\u65e0\u7b26\u53f7\u6570\u3002\u5728\u8d1f\u7684\u6709\u7b26\u53f7\u6570\u548c\u65e0\u7b26\u53f7\u6570\u8fdb\u884c\u6bd4\u8f83\u7684\u65f6\u5019\uff0c\u5bb9\u6613\u51fa\u73b0\u9519\u8bef\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Waggregate-return \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u7ed3\u6784\u7c7b\u578b\u7684\u51fd\u6570\u8fd4\u56de\u503c\uff0c\u5982\u679c\u51fd\u6570\u7684\u8fd4\u56de\u503c\u4e3a\u7ed3\u6784\u3001\u8054\u5408\u7b49\u7c7b\u578b\u65f6\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wmultichar \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u5b57\u7b26\u7c7b\u53d8\u91cf\u7684\u9519\u8bef\u8d4b\u503c\uff0c\u5f53\u4f7f\u7528 char c = \u2018test\u2019 \u8fd9\u6837\u7684\u4ee3\u7801\u65f6\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Wunreachable-code \u8fd9\u4e2a\u9009\u9879\u9488\u5bf9\u5197\u4f59\u4ee3\u7801\uff0c\u5982\u679c\u4ee3\u7801\u4e2d\u6709\u4e0d\u80fd\u5230\u8fbe\u7684\u4ee3\u7801\u65f6\uff0c\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u8b66\u544a\u3002<\/li><li>-Werror \u5c06\u8b66\u544a\u5f53\u4f5c\u9519\u8bef\u5904\u7406\u3002\u539f\u672c\u8b66\u544a\u7684\u5185\u5bb9\u76f4\u63a5\u62a5\u9519\u5e76\u505c\u6b62\u7f16\u8bd1\u3002<\/li><\/ul>\n\n\n\n<p>\u8bed\u8a00\u6807\u51c6<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>-ansi \u4e0e ANSI C \u517c\u5bb9<\/li><li>-pedantic \u5141\u8bb8\u53d1\u51fa ANSI\/ISO C \u6807\u51c6\u6240\u5217\u51fa\u7684\u6240\u6709\u8b66\u544a\u3002<\/li><li>-pedantic-errors \u5141\u8bb8\u53d1\u51fa ANSI\/ISO C \u6807\u51c6\u6240\u5217\u51fa\u7684\u6240\u6709\u9519\u8bef<\/li><li>-std \u6307\u5b9a\u8bed\u8a00\u6807\u51c6\uff0c\u5bf9 C \u8bed\u8a00\u6709\u5982 c89\u3001c90\u3001c99\u3001c11\u3001c17\uff0c\u5bf9 C++ \u6709\u5982 c++98\u3001c++11\u3001c++14\u3001c++17\uff0c\u4f7f\u7528\u683c\u5f0f\u5982 gcc -std=c17 \u548c g++ -std=c++17\u3002\u5f53\u7136 C++ 20 \u5176\u5b9e\u5df2\u7ecf\u6709\u786e\u5b9a\u7248\u4e86\uff0c\u53ea\u662f\u6211 Ubuntu 20.04 LTS \u7cfb\u7edf\u76ee\u524d apt \u80fd\u5b89\u88c5\u7684 GNU \u7f16\u8bd1\u5668\u7684\u6700\u9ad8\u7248\u672c\u4e0e GNU \u6700\u65b0\u7248\u672c\u8fd8\u662f\u5dee\u4e00\u4e9b\uff0c\u6ca1\u652f\u6301\uff0c\u5982\u679c\u7528\u6e90\u7801\u7f16\u8bd1\u5b89\u88c5\u6700\u65b0\u7248\u7684 GNU \u7f16\u8bd1\u5668\u80af\u5b9a\u662f\u652f\u6301\u7684\uff08\u7f16\u8bd1\u5b89\u88c5 GNU \u7f16\u8bd1\u5668\u53c2\u8003: <a rel=\"noreferrer noopener\" href=\"https:\/\/blog.iyatt.com\/?p=2057\" target=\"_blank\">https:\/\/blog.iyatt.com\/?p=2057<\/a>\uff09\uff0c\u53e6\u5916\u76ee\u524d C++23 \u548c C23 \u90fd\u5728\u5f00\u53d1\u4e2d\u4e86\uff0c\u4e2d\u8bd1\u7248\u6807\u51c6\u6587\u6863\u53c2\u8003\uff1a<a rel=\"noreferrer noopener\" href=\"https:\/\/zh.cppreference.com\/\" target=\"_blank\">https:\/\/zh.cppreference.com\/<\/a>\u3002<\/li><\/ul>\n\n\n\n<p>\u8c03\u8bd5<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>-g \u5728\u7f16\u8bd1\u751f\u6210\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e2d\u6dfb\u52a0\u8c03\u8bd5\u4fe1\u606f\uff0c\u6bd4\u5982\u4f1a\u5c06\u4ee3\u7801\u6587\u672c\u653e\u8fdb\u53bb\uff0cgdb \u8c03\u8bd5\u7684\u65f6\u5019\u4e5f\u80fd\u8bbe\u7f6e\u65ad\u70b9\u3002<\/li><li>-fsyntax-only \u4ec5\u8fdb\u884c\u7f16\u8bd1\u68c0\u67e5\u4f46\u4e0d\u5b9e\u9645\u7f16\u8bd1\u751f\u6210\u4e8c\u8fdb\u5236\u6587\u4ef6<\/li><li>sanitize \u7cfb\u5217\u53c2\u6570\uff0c\u53c2\u8003\uff1a<a rel=\"noreferrer noopener\" href=\"https:\/\/blog.iyatt.com\/?p=3384\" target=\"_blank\">https:\/\/blog.iyatt.com\/?p=3384<\/a><\/li><\/ul>\n\n\n\n<p>\u7f16\u8bd1\u4f18\u5316<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>-O0 \u4e0d\u505a\u4efb\u4f55\u4f18\u5316\uff0c\u9ed8\u8ba4\u72b6\u6001<\/li><li>-O1 \u7a0b\u5e8f\u505a\u90e8\u5206\u7f16\u8bd1\u4f18\u5316\uff0c\u5bf9\u4e8e\u5927\u51fd\u6570,\u4f18\u5316\u7f16\u8bd1\u5360\u7528\u7a0d\u5fae\u591a\u7684\u65f6\u95f4\u548c\u76f8\u5f53\u5927\u7684\u5185\u5b58\u3002\u4f7f\u7528\u672c\u9879\u4f18\u5316\uff0c\u7f16\u8bd1\u5668\u4f1a\u5c1d\u8bd5\u51cf\u5c0f\u751f\u6210\u4ee3\u7801\u7684\u5c3a\u5bf8\uff0c\u4ee5\u53ca\u7f29\u77ed\u6267\u884c\u65f6\u95f4\uff0c\u4f46\u5e76\u4e0d\u6267\u884c\u9700\u8981\u5360\u7528\u5927\u91cf\u7f16\u8bd1\u65f6\u95f4\u7684\u4f18\u5316\u3002&nbsp;<\/li><li>-O2 \u6267\u884c\u51e0\u4e4e\u6240\u6709\u7684\u4e0d\u5305\u542b\u65f6\u95f4\u548c\u7a7a\u95f4\u6298\u4e2d\u7684\u4f18\u5316\u3002\u5f53\u8bbe\u7f6eO2\u9009\u9879\u65f6\uff0c\u7f16\u8bd1\u5668\u5e76\u4e0d\u8fdb\u884c\u5faa\u73af\u6253\u5f00\u4ee5\u53ca\u51fd\u6570\u5185\u8054\u3002\u4e0eO1\u6bd4\u8f83\u800c\u8a00\uff0cO2\u4f18\u5316\u589e\u52a0\u4e86\u7f16\u8bd1\u65f6\u95f4\u7684\u57fa\u7840\u4e0a\uff0c\u63d0\u9ad8\u4e86\u751f\u6210\u4ee3\u7801\u7684\u6267\u884c\u6548\u7387\u3002<\/li><li>-O3 \u5728O2\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\uff0c\u4f8b\u5982\u4f7f\u7528\u4f2a\u5bc4\u5b58\u5668\u7f51\u7edc\uff0c\u666e\u901a\u51fd\u6570\u7684\u5185\u8054\uff0c\u4ee5\u53ca\u9488\u5bf9\u5faa\u73af\u7684\u66f4\u591a\u4f18\u5316\u3002<\/li><li>-Os \u76f8\u5f53\u4e8e-O2.5\u3002\u662f\u4f7f\u7528\u4e86\u6240\u6709-O2\u7684\u4f18\u5316\u9009\u9879\uff0c\u4f46\u53c8\u4e0d\u7f29\u51cf\u4ee3\u7801\u5c3a\u5bf8\u7684\u65b9\u6cd5\u3002<\/li><\/ul>\n\n\n\n<p>\u7f16\u8bd1\u94fe\u63a5<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>-I \u540e\u9762\u8ddf\u4e0a\u5934\u6587\u4ef6\u6240\u5728\u7684\u8def\u5f84\u3002\u5f53\u7f16\u8bd1\u7684\u7a0b\u5e8f\u5f15\u7528\u67d0\u4e2a\u5934\u6587\u4ef6\uff0c\u800c\u8be5\u5934\u6587\u4ef6\u4e0d\u5728\u7cfb\u7edf\u9ed8\u8ba4\u641c\u7d22\u8def\u5f84\u4e5f\u4e0d\u5728\u6e90\u7801\u6587\u4ef6\u540c\u4e00\u8def\u5f84\u4e0b\u65f6\u9700\u8981\u624b\u52a8\u6307\u5b9a\uff0c\u683c\u5f0f\u5982 -I\/usr\/include \u6216\u8005 -I \/usr\/include\u3002<\/li><li>-L \u540e\u9762\u8ddf\u4e0a\u9700\u8981\u94fe\u63a5\u7684\u5e93\u8def\u5f84\u3002\u5f53\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u7684\u5e93\u4e0d\u5728\u7cfb\u7edf\u9ed8\u8ba4\u7684\u641c\u7d22\u8def\u5f84\u6216\u5219\u6e90\u7801\u540c\u4e00\u8def\u5f84\u4e0b\uff0c\u9700\u8981\u624b\u52a8\u6307\u5b9a\u8def\u5f84\uff0c\u683c\u5f0f\u5982 -L\/usr\/lib \u6216\u8005 -L \/usr\/lib\u3002<\/li><li>-l \u540e\u9762\u6307\u5b9a\u5e93\u540d\u3002\u5982\u679c\u5e93\u6587\u4ef6\u540d\u4e3a libtest.so\uff0c\u90a3\u4e48\u4f7f\u7528 -ltest \u94fe\u63a5\u52a8\u6001\u5e93\u3002\u94fe\u63a5\u7b2c\u4e09\u65b9\u5e93\u4ee5\u53ca\u90e8\u5206\u6807\u51c6\u5e93\u65f6\u9700\u8981\u6307\u5b9a\u5e93\u540d\uff0c\u6bd4\u5982 C \u4e2d\u6709\u65f6\u5019\u4f7f\u7528\u5230\u6570\u5b66\u5e93\uff0c\u7f16\u8bd1\u5c31\u8981\u6307\u5b9a -lm\u3002<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%B8%80%E4%B8%AA%E5%A4%9A%E6%BA%90%E7%A0%81%E6%96%87%E4%BB%B6%E5%B7%A5%E7%A8%8B%E7%A4%BA%E4%BE%8B\"><\/span>\u4e00\u4e2a\u591a\u6e90\u7801\u6587\u4ef6\u5de5\u7a0b\u793a\u4f8b<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u5de5\u7a0b\u7ed3\u6784<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"165\" height=\"183\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-147.png\" alt=\"\" class=\"wp-image-4875 lazyload\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 165px; --smush-placeholder-aspect-ratio: 165\/183;\" \/><\/figure>\n\n\n\n<p>\u6e90\u7801<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * @file add.h\n * @brief \u6574\u6570\u52a0\u6cd5\u8ba1\u7b97\n *\/\n#ifndef ADD_H\n#define ADD_H\n\nint add(int num1, int num2);\n\n#endif<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * @file add.c\n * @brief \u6574\u6570\u52a0\u6cd5\u8ba1\u7b97\n *\/\n#include \"add.h\"\n\nint add(int num1, int num2)\n{\n    return num1 + num2;\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * @file sub.h\n * @brief \u6574\u6570\u51cf\u6cd5\u8ba1\u7b97\n *\/\n#ifndef SUB_H\n#define SUB_H\n\nint sub(int num1, int num2);\n\n#endif<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * @file sub.c\n * @brief \u6574\u6570\u51cf\u6cd5\u8ba1\u7b97\n *\/\n#include \"sub.h\"\n\nint sub(int num1, int num2)\n{\n    return num1 - num2;\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * @file main.c\n * @brief \u4e3b\u7a0b\u5e8f\n *\/\n#include \"add.h\"\n#include \"sub.h\"\n#include &lt;stdio.h>\n\nint main()\n{\n    int num1 = 9;\n    int num2 = 1;\n    printf(\"%d + %d = %d\\n\", num1, num2, add(num1, num2));\n    printf(\"%d - %d = %d\\n\", num1, num2, sub(num1, num2));\n}<\/pre>\n\n\n\n<p>Makefile<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5de6\u8fb9\u4e3a\u8981\u751f\u6210\u7684\u76ee\u6807\uff0c\u53f3\u8fb9\u4e3a\u4f9d\u8d56\u6587\u4ef6\n\n# \u751f\u6210 demo \u7684\u89c4\u5219\uff0c\u4f9d\u8d56\u4e8e .o \u6587\u4ef6\uff0c\u4f46\u662f\u5f00\u59cb\u7684\u65f6\u5019\u4e0d\u5b58\u5728\uff0c\u90a3\u4e48\u5c31\u4f1a\u5148\u6267\u884c\u540e\u9762\u7684\uff0c\u7f16\u8bd1\u751f\u6210 .o \u6587\u4ef6\u4e4b\u540e\u518d\u6765\u94fe\u63a5\ndemo: add\/add.o sub\/sub.o main.o\n\tgcc -o demo add\/add.o sub\/sub.o main.o\n\n# \u751f\u6210 add.o \u7684\u89c4\u5219\nadd.o: add\/add.c add.add.h\n\tgcc -c -o add\/add.o add\/add.c\n\n# \u751f\u6210 sub.o \u7684\u89c4\u5219\nsub.o: sub\/sub.c sub\/sub.h\n\tgcc -c -o sub\/sub.o sub\/sub.c\n\n# \u751f\u6210 main.o \u7684\u89c4\u5219\nmain.o: main.c\n\tgcc -c -o main.o main.c -Iadd -Isub\n\n# \u6e05\u7406\u7684\u89c4\u5219\nclean:\n\trm -rf add\/add.o sub\/sub.o main.o demo<\/pre>\n\n\n\n<p>\u6267\u884c\u7f16\u8bd1\uff0c\u751f\u6210\u53ef\u6267\u884c\u7a0b\u5e8f demo<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">make<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"507\" height=\"179\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-148.png\" alt=\"\" class=\"wp-image-4878 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-148.png 507w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-148-300x106.png 300w\" data-sizes=\"(max-width: 507px) 100vw, 507px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 507px; --smush-placeholder-aspect-ratio: 507\/179;\" \/><\/figure>\n\n\n\n<p>make \u6267\u884c\u524d\u4f1a\u68c0\u67e5\u6587\u4ef6\u4fee\u6539\u65f6\u95f4\uff0c\u5047\u5982\u8fd9\u91cc\u4fee\u6539\u4e00\u4e0b main.c \u6587\u4ef6\uff0c\u518d\u6267\u884c\u7f16\u8bd1<\/p>\n\n\n\n<p>\u4f1a\u53d1\u73b0\u6ca1\u6709\u91cd\u65b0\u518d\u7f16\u8bd1 add.c \u548c sub.c\uff0c\u53ea\u662f\u628a\u4fee\u6539\u8fc7\u7684 main.c \u91cd\u65b0\u7f16\u8bd1\u4e86<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"508\" height=\"167\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-150.png\" alt=\"\" class=\"wp-image-4881 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-150.png 508w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-150-300x99.png 300w\" data-sizes=\"(max-width: 508px) 100vw, 508px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 508px; --smush-placeholder-aspect-ratio: 508\/167;\" \/><\/figure>\n\n\n\n<p>\u6267\u884c\u6e05\u7406\u89c4\u5219<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">make clean<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"585\" height=\"112\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-149.png\" alt=\"\" class=\"wp-image-4879 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-149.png 585w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-149-300x57.png 300w\" data-sizes=\"(max-width: 585px) 100vw, 585px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 585px; --smush-placeholder-aspect-ratio: 585\/112;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"make_%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F\"><\/span>make \u4e2d\u7684\u53d8\u91cf<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\uff08\u4e00\uff09\u81ea\u5b9a\u4e49\u53d8\u91cf<\/p>\n\n\n\n<p>\u521b\u5efa\u4e00\u4e2a\u53d8\u91cf CFLAGS\uff0c\u8d4b\u503c -Iadd -Isub<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CFLAGS = -Iadd -Isub<\/pre>\n\n\n\n<p>\u8c03\u7528\u53d8\u91cf CFLAGS<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$(CFLAGS)<\/pre>\n\n\n\n<p>\u90a3\u4e48\u8fd9\u91cc\u5c06\u4e0a\u9762\u7684 Makefile \u6539\u4e00\u4e0b\uff0c\u53d8\u6210\u4e0b\u9762\u7684<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u7f16\u8bd1\u5668\nC = gcc\n# \u7f16\u8bd1\u53c2\u6570\nCFLAGS = -Iadd -Isub\n# \u76ee\u6807\u6587\u4ef6\nOBJS = add\/add.o sub\/sub.o main.o\n# \u6700\u7ec8\u8981\u751f\u6210\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u540d\nTARGET = demo\n# \u5220\u9664\u547d\u4ee4\nRM = rm -rf\n\n$(TARGET):$(OBJS)\n\t$(C) -o $(TARGET) $(OBJS)\n\n# %.o:%.c \u6a21\u5f0f\u5339\u914d\uff0c\u6bd4\u5982\u53ef\u4ee5\u5c06 add\/add.o \u66ff\u6362\u4e3a add\/add.c\uff0c\u76f4\u63a5\u53bb\u7f16\u8bd1 add\/add.c \u6587\u4ef6\n# $@ \u548c @&lt; \u4e3a\u81ea\u52a8\u53d8\u91cf\uff0c\u540e\u9762\uff08\u4e09\uff09\u4e2d\u9a6c\u4e0a\u8981\u8bf4\n$(OBJS):%.o:%.c\n\t$(C) $(CFLAGS) -c -o $@ $&lt;\n\nclean:\n\t$(RM) $(TARGET) $(OBJS)\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"563\" height=\"192\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-151.png\" alt=\"\" class=\"wp-image-4882 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-151.png 563w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-151-300x102.png 300w\" data-sizes=\"(max-width: 563px) 100vw, 563px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 563px; --smush-placeholder-aspect-ratio: 563\/192;\" \/><\/figure>\n\n\n\n<p>\uff08\u4e8c\uff09\u9884\u5b9a\u4e49\u53d8\u91cf<\/p>\n\n\n\n<p>\u5e38\u7528\u7684\u4e00\u4e9b\u9884\u5b9a\u4e49\u53d8\u91cf<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\u53d8\u91cf\u540d<\/td><td>\u542b\u4e49<\/td><td>\u9ed8\u8ba4\u503c<\/td><\/tr><tr><td>AR<\/td><td>\u751f\u6210\u9759\u6001\u5e93\u6587\u4ef6\u7684\u7a0b\u5e8f\u540d<\/td><td>ar<\/td><\/tr><tr><td>AS<\/td><td>\u6c47\u7f16\u7f16\u8bd1\u5668\u7684\u540d\u79f0<\/td><td>as<\/td><\/tr><tr><td>CC<\/td><td>C \u8bed\u8a00\u7f16\u8bd1\u5668\u7684\u540d\u79f0<\/td><td>cc<\/td><\/tr><tr><td>CPP<\/td><td>C \u8bed\u8a00\u9884\u7f16\u8bd1\u5668\u7684\u540d\u79f0<\/td><td>$(CC) -E<\/td><\/tr><tr><td>CXX<\/td><td>C++ \u7f16\u8bd1\u5668\u7684\u540d\u79f0<\/td><td>g++<\/td><\/tr><tr><td>RM<\/td><td>\u5220\u9664\u6587\u4ef6\u7a0b\u5e8f\u7684\u540d\u79f0<\/td><td>rm -f<\/td><\/tr><tr><td>ARFLAGS<\/td><td>\u751f\u6210\u9759\u6001\u5e93\u5e93\u6587\u4ef6\u7a0b\u5e8f\u7684\u9009\u9879<\/td><td>\u65e0\u9ed8\u8ba4\u503c<\/td><\/tr><tr><td>ASFLAGS<\/td><td>\u6c47\u7f16\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u9009\u9879<\/td><td>\u65e0\u9ed8\u8ba4\u503c<\/td><\/tr><tr><td>CFLAGS<\/td><td>C \u8bed\u8a00\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u9009\u9879<\/td><td>\u65e0\u9ed8\u8ba4\u503c<\/td><\/tr><tr><td>CPPFLAGS<\/td><td>C \u8bed\u8a00\u4e0e\u7f16\u8bd1\u7684\u7f16\u8bd1\u9009\u9879<\/td><td>\u65e0\u9ed8\u8ba4\u503c<\/td><\/tr><tr><td>CXXFLAGS<\/td><td>C++ \u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u9009\u9879<\/td><td>\u65e0\u9ed8\u8ba4\u503c<\/td><\/tr><tr><td><\/td><td><\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u90a3\u4e48\u8fd9\u91cc\u5728\u524d\u4e00\u4e2a Makefile \u7684\u57fa\u7840\u4e0a\u4fee\u6539\u4e00\u4e0b\uff0c\u5176\u4e2d CC \u548c RM \u4f7f\u7528\u9ed8\u8ba4\u503c\uff0c\u4e0d\u518d\u624b\u52a8\u6307\u5b9a\u3002\u5982\u679c\u624b\u52a8\u6307\u5b9a\uff0c\u5219\u4f18\u5148\u6309\u624b\u52a8\u6307\u5b9a\u7684\u503c\u3002<\/p>\n\n\n\n<p>\u5728\u6211 Ubuntu 20.04 LTS \u7cfb\u7edf\u4e0a\uff0ccc \u4e5f\u662f\u6307\u5411 gcc \u7684<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"703\" height=\"144\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-157.png\" alt=\"\" class=\"wp-image-4895 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-157.png 703w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-157-300x61.png 300w\" data-sizes=\"(max-width: 703px) 100vw, 703px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 703px; --smush-placeholder-aspect-ratio: 703\/144;\" \/><\/figure>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CFLAGS = -Iadd -Isub\nOBJS = add\/add.o sub\/sub.o main.o\nTARGET = demo\n\n$(TARGET):$(OBJS)\n\t$(CC) -o $(TARGET) $(OBJS)\n\n$(OBJS):%.o:%.c\n\t$(CC) $(CFLAGS) -c -o $@ $&lt;\n\nclean:\n\t$(RM) $(TARGET) $(OBJS)\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"556\" height=\"204\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-152.png\" alt=\"\" class=\"wp-image-4885 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-152.png 556w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-152-300x110.png 300w\" data-sizes=\"(max-width: 556px) 100vw, 556px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 556px; --smush-placeholder-aspect-ratio: 556\/204;\" \/><\/figure>\n\n\n\n<p>\uff08\u4e09\uff09\u81ea\u52a8\u53d8\u91cf<\/p>\n\n\n\n<p>\u5e38\u7528\u81ea\u52a8\u53d8\u91cf<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\u53d8\u91cf<\/td><td>\u542b\u4e49<\/td><\/tr><tr><td>$*<\/td><td>\u8868\u793a\u76ee\u6807\u6587\u4ef6\u7684\u540d\u79f0\uff0c\u4e0d\u5305\u542b\u76ee\u6807\u6587\u4ef6\u7684\u6269\u5c55\u540d<\/td><\/tr><tr><td>$+<\/td><td>\u8868\u793a\u6240\u6709\u7684\u4f9d\u8d56\u6587\u4ef6\uff0c\u8fd9\u4e9b\u4f9d\u8d56\u6587\u4ef6\u4e4b\u95f4\u4ee5\u7a7a\u683c\u5206\u5f00\uff0c\u6309\u7167\u51fa\u73b0\u7684\u5148\u540e\u987a\u5e8f\uff0c\u5176\u4e2d\u53ef\u80fd\u5305\u542b\u91cd\u590d\u7684\u4f9d\u8d56\u6587\u4ef6<\/td><\/tr><tr><td>$&lt;<\/td><td>\u8868\u793a\u4f9d\u8d56\u9879\u4e2d\u7b2c\u4e00\u4e2a\u4f9d\u8d56\u6587\u4ef6\u7684\u540d\u79f0<\/td><\/tr><tr><td>$?<\/td><td>\u4f9d\u8d56\u9879\u4e2d\uff0c\u6240\u6709\u76ee\u6807\u6587\u4ef6\u65f6\u95f4\u6233\u665a\u7684\u4f9d\u8d56\u6587\u4ef6\uff0c\u4f9d\u8d56\u6587\u4ef6\u4e4b\u95f4\u4ee5\u7a7a\u683c\u5206\u5f00<\/td><\/tr><tr><td>$@<\/td><td>\u76ee\u6807\u9879\u4e2d\u76ee\u6807\u6587\u4ef6\u7684\u540d\u79f0<\/td><\/tr><tr><td>$^<\/td><td>\u4f9d\u8d56\u9879\u4e2d\uff0c\u6240\u6709\u4e0d\u91cd\u590d\u7684\u4f9d\u8d56\u6587\u4ef6\uff0c\u8fd9\u4e9b\u6587\u4ef6\u4e4b\u95f4\u4ee5\u7a7a\u683c\u5206\u5f00<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u90a3\u4e48\u8fd9\u91cc\u518d\u5728\u524d\u4e00\u4e2a Makefile \u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u4fee\u6539<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CFLAGS = -Iadd -Isub\nOBJS = add\/add.o sub\/sub.o main.o\nTARGET = demo\n\n$(TARGET):$(OBJS)\n\t$(CC) -o $@ $^\n\n$(OBJS):%.o:%.c\n\t$(CC) $(CFLAGS) -c -o $@ $&lt;\n\nclean:\n\t$(RM) $(TARGET) $(OBJS)\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"538\" height=\"198\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-153.png\" alt=\"\" class=\"wp-image-4886 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-153.png 538w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-153-300x110.png 300w\" data-sizes=\"(max-width: 538px) 100vw, 538px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 538px; --smush-placeholder-aspect-ratio: 538\/198;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%90%9C%E7%B4%A2%E8%B7%AF%E5%BE%84\"><\/span>\u641c\u7d22\u8def\u5f84<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u5728\u8f83\u5927\u7684\u9879\u76ee\u4e2d\uff0c\u5f80\u5f80\u5b58\u5728\u5f88\u591a\u76ee\u5f55\uff0c\u6bcf\u4e2a\u6587\u4ef6\u624b\u52a8\u8f93\u5165\u8def\u5f84\u6bd4\u8f83\u9ebb\u70e6\u800c\u4e14\u4e5f\u5bb9\u6613\u51fa\u9519\uff0c\u800c make \u63d0\u4f9b\u4e86\u4e00\u4e2a\u76ee\u5f55\u641c\u7d22\u529f\u80fd\u53ef\u4ee5\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u5c06\u8def\u5f84\u6dfb\u52a0\u5230 VPATH \u53d8\u91cf\u4e2d\uff0c\u8def\u5f84\u4e4b\u95f4\u4ee5\u5206\u53f7\u9694\u5f00\uff0cmake \u4f1a\u5c06\u6307\u5b9a\u6587\u4ef6\u7684\u76ee\u5f55\u6dfb\u52a0\u5230\u6587\u4ef6\u4e0a\u3002<\/p>\n\n\n\n<p>\u90a3\u4e48\u8fd9\u91cc\u57fa\u4e8e\u524d\u9762\u7684 Makefile \u518d\u6b21\u6539\u8fdb\uff0c\u5982\u4e0b<\/p>\n\n\n\n<p>\u4f8b\u5982\u8fd9\u91cc\u5c31\u4e0d\u7528\u518d\u6307\u5b9a add\/add.o\uff0c\u53ef\u4ee5\u5199 add.o\uff0c\u53ea\u8981\u7ed9\u51fa\u76ee\u5f55 add \u6dfb\u52a0\u5230 VPATH \u4e2d\uff0c\u5c31\u4f1a\u81ea\u52a8\u6dfb\u52a0\u4e0a\u8fd9\u4e2a\u8def\u5f84\u3002\u53e6\u5916\u505a\u4e86\u4e00\u5b9a\u7684\u4fee\u6539\uff0c\u7f16\u8bd1\u751f\u6210\u7684\u4e2d\u95f4\u6587\u4ef6\u548c\u6700\u7ec8\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u90fd\u653e\u5165 build \u76ee\u5f55\u4e86\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CFLAGS = -Iadd -Isub\nVPATH = add:sub\nOBJSDIR = build\nOBJS = add.o sub.o main.o\nTARGET = $(OBJSDIR)\/demo\nRM = rm -rf\n\n$(TARGET):$(OBJSDIR) $(OBJS)\n\t$(CC) -o $@ $(OBJSDIR)\/*.o\n\n$(OBJS):%.o:%.c\n\t$(CC) $(CFLAGS) -c -o $(OBJSDIR)\/$@ $&lt;\n\n$(OBJSDIR):\n\tmkdir $@\n\nclean:\n\t$(RM) $(OBJSDIR)\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"566\" height=\"187\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-154.png\" alt=\"\" class=\"wp-image-4888 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-154.png 566w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-154-300x99.png 300w\" data-sizes=\"(max-width: 566px) 100vw, 566px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 566px; --smush-placeholder-aspect-ratio: 566\/187;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%87%AA%E5%8A%A8%E6%8E%A8%E5%AF%BC\"><\/span>\u81ea\u52a8\u63a8\u5bfc<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Makefile \u4e2d\u5173\u4e8e\u6e90\u6587\u4ef6\u7f16\u8bd1\u90e8\u5206\u7684\u89c4\u5219\u53ef\u4ee5\u7701\u7565\u6389\uff0cmake \u4f1a\u6309\u7167\u9ed8\u8ba4\u7684\u89c4\u5219\u5c06 .c \u6587\u4ef6\u7f16\u8bd1\u4e3a .o \u6587\u4ef6\uff0c\u7531 make \u51b3\u5b9a\u5982\u4f55\u4f7f\u7528\u7f16\u8bd1\u547d\u4ee4\u4ee5\u53ca\u9009\u9879\uff0c\u6b64\u9ed8\u8ba4\u89c4\u5219\u79f0\u4e3a make \u7684\u9690\u542b\u89c4\u5219\u3002<\/p>\n\n\n\n<p>\u8fd9\u91cc\u518d\u6b21\u5728\u524d\u4e00\u4e2a Makefile \u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u4fee\u6539\uff0c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CFLAGS = -Iadd -Isub\nVPATH = add:sub\nOBJS = add.o sub.o main.o\nTARGET = demo\n\n$(TARGET):$(OBJS)\n\t$(CC) -o $@ $^ $(CFLAGS)\n\nclean:\n\t$(RM) $(TARGET) $(OBJS)\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"559\" height=\"209\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-155.png\" alt=\"\" class=\"wp-image-4891 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-155.png 559w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-155-300x112.png 300w\" data-sizes=\"(max-width: 559px) 100vw, 559px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 559px; --smush-placeholder-aspect-ratio: 559\/209;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E9%80%92%E5%BD%92_make\"><\/span>\u9012\u5f52 make<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u5728\u4e00\u4e2a\u5de5\u7a0b\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e2d\uff0c\u5f80\u5f80\u4e0d\u53ea\u662f\u4e00\u4e2a\u4eba\u8fdb\u884c\u5f00\u53d1\uff0c\u53ef\u80fd\u4e00\u4e2a\u4eba\u8d1f\u8d23\u9879\u76ee\u4e2d\u7684\u4e00\u4e2a\u6a21\u5757\u3002\u5404\u4e2a\u6a21\u5757\u7684\u6e90\u7801\u5728\u76f8\u5bf9\u72ec\u7acb\u7684\u76ee\u5f55\u4e2d\uff0c\u6b64\u65f6\u7531\u540c\u4e00\u4e2a Makefile \u8fdb\u884c\u7ec4\u7ec7\u7f16\u8bd1\u4f1a\u5341\u5206\u4e0d\u4fbf\uff0c\u6bcf\u4e2a\u6a21\u5757\u7684\u6e90\u7801\u7ed3\u6784\u6539\u53d8\u90fd\u9700\u8981\u4fee\u6539\u540c\u4e00\u4e2a Makefile \u6587\u4ef6\uff0c\u8fd9\u5728\u7ef4\u62a4\u65f6\u662f\u4e2a\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u56e0\u800c make \u652f\u6301\u9012\u5f52\u8c03\u7528\uff0c\u53ef\u4ee5\u901a\u8fc7\u603b Makefile \u9012\u5f52\u8c03\u7528\u5404\u5b50\u76ee\u5f55\u7684 Makefile\u3002\u8fd9\u91cc\u8fd8\u662f\u4ee5\u524d\u9762\u7684\u5de5\u7a0b\u4e3a\u4f8b\uff0c\u73b0\u5728\u4e00\u5171\u4f1a\u6709\u4e09\u4e2a Makefile \u6587\u4ef6\uff0c\u5206\u522b\u5728 add \u548c sub \u76ee\u5f55\u4e0b\u5404\u589e\u52a0\u4e86\u4e00\u4e2a\uff0c\u9879\u76ee\u7ed3\u6784\u5982\u4e0b<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"179\" height=\"212\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-156.png\" alt=\"\" class=\"wp-image-4893 lazyload\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 179px; --smush-placeholder-aspect-ratio: 179\/212;\" \/><\/figure>\n\n\n\n<p>\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u7684\u603b\u63a7 Makefile<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u9700\u8981\u4f20\u9012\u7ed9\u4e0b\u5c42\u7684 Makefile \u7684\u53d8\u91cf\uff0c\u53ef\u4ee5\u4f7f\u7528 export\nexport CFLAGS = -Wall -std=c17\nexport OBJSDIR = ${shell pwd}\/build\nTRAGET = $(OBJSDIR)\/demo\n\n# \u901a\u8fc7 $(MAKE) -C \u9012\u5f52\u8c03\u7528\u4e0b\u5c42\u7684 Makefile\n$(TRAGET):$(OBJSDIR) main.o\n\t$(MAKE) -C add\n\t$(MAKE) -C sub\n\t$(CC) -o $@ $(OBJSDIR)\/*.o\n\nmain.o:%.o:%.c\n\t$(CC) -c -o $(OBJSDIR)\/$@ $&lt; $(CFLAGS) -Iadd -Isub\n\n$(OBJSDIR):\n\tmkdir -p $(OBJSDIR)\n\nclean:\n\t$(RM) $(TRAGET) $(OBJSDIR)\/*.o<\/pre>\n\n\n\n<p>add \u76ee\u5f55\u4e0b\u7684 Makefile<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">OBJS = add.o\n\nall:$(OBJS)\n$(OBJS):%.o:%.c\n\t$(CC) -c -o $(OBJSDIR)\/$@ $&lt; $(CFLAGS)\n<\/pre>\n\n\n\n<p>sub \u76ee\u5f55\u4e0b\u7684 Makefile<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">OBJS = sub.o\n\nall:$(OBJS)\n$(OBJS):%.o:%.c\n\t$(CC) -c -o $(OBJSDIR)\/$@ $&lt; $(CFLAGS)\n<\/pre>\n\n\n\n<p>\u6d4b\u8bd5\u7f16\u8bd1<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"383\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/2022-04-10-01-33-38-\u7684\u5c4f\u5e55\u622a\u56fe-1024x383.png\" alt=\"\" class=\"wp-image-4899 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/2022-04-10-01-33-38-\u7684\u5c4f\u5e55\u622a\u56fe-1024x383.png 1024w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/2022-04-10-01-33-38-\u7684\u5c4f\u5e55\u622a\u56fe-300x112.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/2022-04-10-01-33-38-\u7684\u5c4f\u5e55\u622a\u56fe-768x287.png 768w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/2022-04-10-01-33-38-\u7684\u5c4f\u5e55\u622a\u56fe.png 1137w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/383;\" \/><\/figure>\n\n\n\n<p><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"make_%E4%B8%AD%E7%9A%84%E5%87%BD%E6%95%B0\"><\/span>make \u4e2d\u7684\u51fd\u6570<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u5728\u8f83\u5927\u7684\u5de5\u7a0b\u4e2d\uff0c\u7ecf\u5e38\u9700\u8981\u4e00\u4e9b\u5339\u914d\u64cd\u4f5c\u6216\u8005\u81ea\u52a8\u751f\u6210\u89c4\u5219\u7684\u529f\u80fd\uff0cmake \u51fd\u6570\u5c31\u6d3e\u4e0a\u7528\u573a\u4e86\u3002<\/p>\n\n\n\n<p>\uff08\u4e00\uff09\u83b7\u53d6\u5339\u914d\u6a21\u5f0f\u7684\u6587\u4ef6\u540d &#8211; wildcard<\/p>\n\n\n\n<p>\u8fd9\u4e2a\u51fd\u6570\u7684\u529f\u80fd\u662f\u67e5\u627e\u5f53\u524d\u76ee\u5f55\u4e0b\u6240\u6709\u7b26\u5408\u6a21\u5f0f pattern \u7684\u6587\u4ef6\u540d\uff0c\u5176\u8fd4\u56de\u503c\u662f\u4ee5\u7a7a\u683c\u5206\u5272\u7684\u6240\u6709\u7b26\u5408\u6a21\u5f0f pattern \u7684\u6587\u4ef6\u540d\u5217\u8868\u3002\u683c\u5f0f\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$(wildcard pattern)<\/pre>\n\n\n\n<p>\u5982\u4e0b\uff0c\u8be5\u6a21\u5f0f\u4e0b\u8fd4\u56de\u5f53\u524d\u76ee\u5f55\u4e0b\u6240\u6709\u6269\u5c55\u540d\u4e3a .c \u7684\u6587\u4ef6\u7684\u5217\u8868<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$(wildcard *.c)<\/pre>\n\n\n\n<p>(\u4e8c\uff09\u6a21\u5f0f\u66ff\u6362 &#8211; patsubst<\/p>\n\n\n\n<p>\u8fd9\u4e2a\u51fd\u6570\u7684\u529f\u80fd\u662f\u67e5\u627e\u5b57\u7b26\u4e32 text \u4e2d\u6309\u7167\u7a7a\u683c\u5206\u5f00\u7684\u5b50\u4e32\uff0c\u5c06\u7b26\u5408\u6a21\u5f0f pattern \u7684\u5b57\u7b26\u4e32\u66ff\u6362\u4e3a replacement\u3002pattern \u4e2d\u7684\u6a21\u5f0f\u53ef\u4ee5\u4f7f\u7528\u901a\u914d\u7b26\uff0c% \u4ee3\u8868 0\uff5en \u5404\u5b57\u7b26\uff0c\u5f53 pattern \u548c replacement \u4e2d\u90fd\u6709 % \u65f6\uff0c\u7b26\u5408\u6761\u4ef6\u7684\u5b57\u7b26\u88ab replacement \u4e2d\u7684\u66ff\u6362\u3002\u51fd\u6570\u7684\u8fd4\u56de\u503c\u662f\u66ff\u6362\u540e\u7684\u65b0\u5b57\u7b26\u4e32\u3002\u539f\u578b\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$(patsubst pattern, replacement, text)<\/pre>\n\n\n\n<p>\u4f8b\u5982\u9700\u8981\u5c06 .c \u6587\u4ef6\u66ff\u6362\u4e3a .o \u6587\u4ef6\u65f6\u53ef\u4ee5\u4f7f\u7528<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$(patsubst %.c, %.o, $(wildcard *.c))<\/pre>\n\n\n\n<p>(\u4e09\uff09\u5faa\u73af\u51fd\u6570 &#8211; foreach<\/p>\n\n\n\n<p>\u51fd\u6570\u7684\u529f\u80fd\u4e3a foreach \u5c06 list \u5b57\u7b26\u4e32\u4e2d\u4e00\u4e2a\u7a7a\u683c\u9694\u5f00\u7684\u5b57\u4e32\uff0c\u5148\u4f20\u7ed9\u4e34\u65f6\u53d8\u91cf var\uff0c\u7136\u540e\u6267\u884c text \u8868\u8fbe\u5f0f\uff0ctext \u8868\u8fbe\u5f0f\u5904\u7406\u7ed3\u675f\u540e\u8f93\u51fa\uff0c\u8fd4\u56de\u503c\u4e3a\u7a7a\u683c\u9694\u5f00\u7684\u8868\u8fbe\u5f0f text \u7684\u6267\u884c\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u8fd9\u4e2a\u51fd\u6570\u7684\u539f\u578b\u4e3a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$(foreach var, list, text)<\/pre>\n\n\n\n<p>\u8fd9\u91cc\u8fd8\u662f\u4ee5\u524d\u9762\u7684\u5de5\u7a0b\u4e3a\u4f8b\uff0c\u7136\u540e\u91cd\u65b0\u5199 Makefile \u6587\u4ef6\u3002\u9879\u76ee\u7ed3\u6784\u56de\u5230\u5f00\u59cb\u7684\u65f6\u5019\uff0c\u5982\u4e0b<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"183\" height=\"189\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-159.png\" alt=\"\" class=\"wp-image-4902 lazyload\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 183px; --smush-placeholder-aspect-ratio: 183\/189;\" \/><\/figure>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CFLAGS = -Wall -std=c17 -Iadd -Isub\nTARGET = demo\nDIRS = add sub .\n# \u67e5\u627e\u76ee\u5f55\u4e0b\u6240\u6709\u6269\u5c55\u540d\u4e3a .c \u7684\u6587\u4ef6\nFILES = $(foreach dir, $(DIRS), $(wildcard $(dir)\/*.c))\n# \u5c06\u6269\u5c55\u540d\u7531 .c \u66ff\u6362\u4e3a .o\nOBJS = $(patsubst %.c, %.o, $(FILES))\n\n$(TARGET):$(OBJS)\n\t$(CC) -o $@ $^ $(CFLAGS)\n\nclean:\n\t$(RM) $(TARGET) $(OBJS)<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"573\" height=\"192\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-160.png\" alt=\"\" class=\"wp-image-4903 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-160.png 573w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/04\/image-160-300x101.png 300w\" data-sizes=\"(max-width: 573px) 100vw, 573px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 573px; --smush-placeholder-aspect-ratio: 573\/192;\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u5728 Linux \u4e0b\u641e C\/C++ \u7f16\u7a0b\u5f00\u53d1\uff0c\u6700\u4e3a\u5e38\u7528\u7684\u7f16\u8bd1\u5de5\u5177\u4e3a GNU \u7f16\u8bd1\u5668\uff08gcc\/g++\uff09\u3002\u5bf9\u4e8e\u5f88\u591a\u521d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"zakra_page_container_layout":"customizer","zakra_page_sidebar_layout":"customizer","zakra_remove_content_margin":false,"zakra_sidebar":"customizer","zakra_transparent_header":"customizer","zakra_logo":0,"zakra_main_header_style":"default","zakra_menu_item_color":"","zakra_menu_item_hover_color":"","zakra_menu_item_active_color":"","zakra_menu_active_style":"","zakra_page_header":true,"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-4856","post","type-post","status-publish","format-standard","hentry","category-all"],"modified_by":"IYATT-yx","_links":{"self":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/4856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4856"}],"version-history":[{"count":0,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/4856\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}