{"id":22952,"date":"2023-05-14T03:00:23","date_gmt":"2023-05-13T23:30:23","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/makefiles-a-standard-for-project-tasks-31b\/"},"modified":"2023-05-14T03:00:23","modified_gmt":"2023-05-13T23:30:23","slug":"makefiles-a-standard-for-project-tasks-31b","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/makefiles-a-standard-for-project-tasks-31b\/","title":{"rendered":"Makefiles: \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u06cc \u0628\u0631\u0627\u06cc \u0648\u0638\u0627\u06cc\u0641 \u067e\u0631\u0648\u0698\u0647"},"content":{"rendered":"<div data-article-id=\"1467065\" id=\"article-body\">\n<p>\u0645\u0646 \u0627\u0632 Makefiles \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f CLI \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc\u0645\u060c \u0635\u0631\u0641 \u0646\u0638\u0631 \u0627\u0632 \u0632\u0628\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0648\/\u06cc\u0627 \u0641\u0631\u06cc\u0645\u0648\u0631\u06a9 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0645.<\/p>\n<p>Makefiles \u0641\u0627\u06cc\u0644\u0647\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0627\u06cc GNU \u0647\u0633\u062a\u0646\u062f <code>make<\/code> \u0648\u0638\u0627\u06cc\u0641 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644: <code>build<\/code>\u060c <code>test<\/code>\u060c \u0648 \u063a\u06cc\u0631\u0647.).<\/p>\n<p>\u0645\u0646 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc\u06cc \u062f\u0631 Bash\u060c Elixir\u060c Python\u060c JavaScript \u0648 \u063a\u06cc\u0631\u0647 \u062f\u0627\u0631\u0645\u060c \u0648 \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0627\u0632 \u0627\u06cc\u0646\u0647\u0627 \u0628\u0647 \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0645\u062e\u062a\u0644\u0641\u06cc \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u060c \u0622\u0632\u0645\u0627\u06cc\u0634\u060c \u0627\u062c\u0631\u0627 \u0648 \u063a\u06cc\u0631\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0646 \u0627\u0632 Makefiles \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u06a9\u0631\u062f\u0646 \u0646\u062d\u0648\u0647 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0648\u0638\u0627\u06cc\u0641 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0645.<\/p>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u06cc\u06a9 \u067e\u0627\u06cc\u0647 \u0627\u0633\u062a <code>Makefile<\/code> \u0642\u0627\u0644\u0628\u06cc \u06a9\u0647 \u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>.PHONY: build run test\n\nbuild:    \n    # here goes the command(s) to build the project\n\nrun:\n    # here goes the command(s) to run the project\n\ntest:\n    # here goes the command(s) to test the project\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06af\u0631 \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0628\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u062f\u060c \u0645\u0647\u0645 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u06a9\u062f\u0627\u0645 \u06cc\u06a9 (Postgres\u060c MySQL\u060c SQLite\u060c \u0648 \u063a\u06cc\u0631\u0647)\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u06cc\u0646 \u0648\u0638\u0627\u06cc\u0641 \u0631\u0627 \u0646\u06cc\u0632 \u0634\u0627\u0645\u0644 \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>.PHONY: db.setup db.reset db.create db.migrate db.seed db.drop\n\ndb.setup:\n    make db.create \\\n    &amp;&amp; make db.migrate \\\n    &amp;&amp; make db.seed\n\ndb.reset:\n    make db.drop \\\n    &amp;&amp; make db.setup\n\ndb.create:\n    # here goes the command(s) to create the database\n\ndb.migrate:\n    # here goes the command(s) to migrate the database\n\ndb.seed:\n    # here goes the command(s) to seed the database\n\ndb.drop:\n    # here goes the command(s) to drop the database\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u06cc\u06a9 \u00ab\u0648\u0627\u0633\u0637 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f CLI\u00bb \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u0645\u0627\u0646\u0646\u062f \u0633\u0627\u062e\u062a\u0646\u060c \u0622\u0632\u0645\u0627\u06cc\u0634\u060c \u0627\u062c\u0631\u0627 \u06cc\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u0634\u062a\u0631\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u062c\u0627\u062f \u0648 \u062d\u0630\u0641\u060c \u0627\u0646\u062a\u0642\u0627\u0644 \u0637\u0631\u062d \u0648 \u063a\u06cc\u0631\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f.<\/p>\n<h2>\n<p>  \u06a9\u0645\u06cc \u0632\u0645\u06cc\u0646\u0647 \u062a\u0627\u0631\u06cc\u062e\u06cc \u0627\u0632 GNU Make<br \/>\n<\/h2>\n<p>\u0627\u0632 \u0646\u0638\u0631 \u062a\u0627\u0631\u06cc\u062e\u06cc\u060c <code>make<\/code> \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0641\u0627\u06cc\u0644\u200c\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u062f \u06a9\u0647 \u0627\u063a\u0644\u0628 \u0628\u0647 \u0645\u0639\u0646\u0627\u06cc \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u062f \u0645\u0646\u0628\u0639 \u0628\u0648\u062f.  \u0647\u0631 \u0648\u0638\u06cc\u0641\u0647 \u062f\u0631 \u0648\u0627\u0642\u0639 \u06af\u0631\u0648\u0647\u06cc \u0627\u0632 \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0639\u06cc\u0646 \u062f\u0631 \u0635\u0648\u0631\u062a \u0639\u062f\u0645 \u0648\u062c\u0648\u062f \u0622\u0646 \u0628\u0648\u062f.  \u0627\u06af\u0631 \u0641\u0627\u06cc\u0644 \u062f\u0631 \u062c\u0627\u06cc \u062e\u0648\u062f \u0628\u0648\u062f\u060c \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0627\u062c\u0631\u0627 \u0646\u0645\u06cc \u0634\u062f.<\/p>\n<p>\u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<ul>\n<li>\n<code>api-sdk.js<\/code>  (\u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API\u0647\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646)<\/li>\n<li>\n<code>utils.js<\/code>  (\u062a\u0648\u0627\u0628\u0639 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0639\u0645\u0648\u0645\u06cc)<\/li>\n<li>\n<code>app.js<\/code>  (\u06a9\u062f \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628: \u0645\u0633\u06cc\u0631\u0647\u0627\u060c \u0635\u0641\u062d\u0627\u062a \u0648 \u063a\u06cc\u0631\u0647)<\/li>\n<\/ul>\n<p>\u062f\u0631 webdev\u060c \u0627\u06cc\u0646 \u06cc\u06a9 \u0631\u0648\u0634 \u0645\u0639\u0645\u0648\u0644 \u0627\u0633\u062a \u06a9\u0647 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc JS \u0631\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062f\u0631 \u062a\u0648\u0644\u06cc\u062f\u060c \u0628\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u06a9\u0645\u062a\u0631\u06cc \u0648 \u063a\u06cc\u0631\u0647 \u0631\u0627 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 <code>Makefile<\/code> \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>bundle.js:\n    cat utils.js api-sdk.js app.js &gt; bundle.js\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0647\u0645\u0647 \u06a9\u062f\u0647\u0627\u06cc \u0645\u0646\u0628\u0639 JS \u062f\u0631 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0645\u062a\u0635\u0644 \u0645\u06cc \u06a9\u0646\u062f <code>bundle.js<\/code>.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646\u060c \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0633\u0627\u062e\u062a\u0647 \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>$ make bundle.js\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06af\u0631 \u0641\u0627\u06cc\u0644 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\u060c Make \u062f\u0633\u062a\u0648\u0631\u0627\u062a\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0622\u0646 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u0645\u0627 \u0627\u06af\u0631 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631 \u062f\u0648\u0645 \u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f\u060c \u0646\u062a\u06cc\u062c\u0647 \u0632\u06cc\u0631 \u0631\u0627 \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>$ make bundle.js\nmake: `bundle.js' is up to date.\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u062f\u0648\u0646 \u062e\u0637\u0627\u06cc\u06cc\u060c \u0641\u0642\u0637 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 &#8211; \u0627\u0645\u0627 \u0647\u06cc\u0686 \u062f\u0633\u062a\u0648\u0631\u06cc \u0627\u062c\u0631\u0627 \u0646\u0634\u062f.  \u062f\u0644\u06cc\u0644\u0634 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636\u060c Make \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0628\u06cc\u0644\u062f \u0631\u0627 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f\u060c \u0648 \u0627\u06af\u0631 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f\u060c \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0633\u0627\u062e\u062a \u0622\u0646\u0647\u0627 \u0646\u06cc\u0633\u062a.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u062d\u0630\u0641 \u0627\u06cc\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0639\u062f\u0645 \u0648\u062c\u0648\u062f \u0641\u0627\u06cc\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>.PHONY<\/code> \u0647\u062f\u0641 \u0648\u06cc\u0698\u0647  \u0634\u0645\u0627 \u0627\u0633\u0627\u0633\u0627\u064b \u062a\u0645\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0647 \u0648\u062c\u0648\u062f \u06cc\u0627 \u0639\u062f\u0645 \u0648\u062c\u0648\u062f \u0641\u0627\u06cc\u0644 \u0645\u0631\u062a\u0628\u0637 \u0646\u06cc\u0633\u062a\u0646\u062f\u060c \u0628\u0647 \u062a\u0641\u06a9\u06cc\u06a9 \u0641\u0627\u0635\u0644\u0647 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>.PHONY: bundle.js\n\nbundle.js:\n    cat utils.js api-sdk.js app.js &gt; bundle.js\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628\u060c Make \u0647\u0645\u06cc\u0634\u0647 \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f <code>make bundle.js<\/code> \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f\u060c \u0645\u0647\u0645 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0627\u06af\u0631 <code>bundle.js<\/code> \u0642\u0628\u0644\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06cc\u0627 \u0646\u0647  \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0641\u0627\u06cc\u0644 \u0628\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u0628\u0647 \u0631\u0648\u0632 \u0634\u062f\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631 \u0637\u0648\u0644 \u062a\u0648\u0633\u0639\u0647 \u0645\u0641\u06cc\u062f \u0628\u0627\u0634\u062f!<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 <code>.PHONY<\/code> \u0647\u062f\u0641 \u0648\u06cc\u0698\u0647 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0634\u0645\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.  \u0641\u0642\u0637 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u062c\u0627\u06cc\u06cc \u062f\u0631 \u062e\u0648\u062f \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f <code>Makefile<\/code> \u0628\u0627 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u062a\u0645\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627\u06cc Make \u0634\u0645\u0627 \u06a9\u0647 \u0645\u0633\u062a\u0642\u0644 \u0627\u0632 \u0641\u0627\u06cc\u0644 \u0647\u0633\u062a\u0646\u062f\u060c \u0648 \u0628\u0627\u06cc\u062f \u062e\u0648\u0628 \u0628\u0627\u0634\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0646 \u0627\u0632 Makefiles \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f CLI \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc\u0645\u060c \u0635\u0631\u0641 \u0646\u0638\u0631 \u0627\u0632 \u0632\u0628\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0648\/\u06cc\u0627 \u0641\u0631\u06cc\u0645\u0648\u0631\u06a9 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0645. Makefiles \u0641\u0627\u06cc\u0644\u0647\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0627\u06cc GNU \u0647\u0633\u062a\u0646\u062f make \u0648\u0638\u0627\u06cc\u0641 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644: build\u060c test\u060c \u0648 \u063a\u06cc\u0631\u0647.). \u0645\u0646 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc\u06cc \u062f\u0631 Bash\u060c Elixir\u060c Python\u060c JavaScript \u0648 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":22953,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-22952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/22952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=22952"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/22952\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/22953"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=22952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=22952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=22952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}