<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Makefile on Rancho&#39;s Notes</title>
    <link>https://fan-pengfei.top/tags/makefile/</link>
    <description>Recent content in Makefile on Rancho&#39;s Notes</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 07 Jul 2022 14:12:55 +0000</lastBuildDate>
    <atom:link href="https://fan-pengfei.top/tags/makefile/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>简单Makefile</title>
      <link>https://fan-pengfei.top/posts/%E7%AE%80%E5%8D%95makefile/</link>
      <pubDate>Thu, 07 Jul 2022 14:12:55 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E7%AE%80%E5%8D%95makefile/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;一个简单的Makefile，可以直接Copy使用；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;一用字符常量简化&#34;&gt;一、用字符常量简化&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Makefile文件：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#定义常量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;objects &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;main.o fun1.o &lt;span style=&#34;color:#75715e&#34;&gt;#中间文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cc&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;gcc    &lt;span style=&#34;color:#75715e&#34;&gt;#编译器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prom&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;main &lt;span style=&#34;color:#75715e&#34;&gt;#输出文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prom: &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;objects&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;cc&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;objects&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; -o &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;prom&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;main.o: main.c fun1.h
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;cc&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; -c main.c -o main.o
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		@echo 正在编译main文件 &lt;span style=&#34;color:#75715e&#34;&gt;#前面加@避免重复输出信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fun1.o: fun1.c fun1.h
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;cc&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; -c fun1.c -o fun1.o
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		@echo 正在编译其他文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.PHONY: clean
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;clean:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		-rm &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;prom&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;objects&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;文件夹结构：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;d41af99c56828f3430586aacbec9b96&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E7%AE%80%E5%8D%95makefile/img-1.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;二更简化的写法&#34;&gt;二、更简化的写法&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Makefile文件：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;obj&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;main.o fun1.o
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cc&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;gcc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prom&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;main
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;deps&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;fun1.h
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;prom&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;:&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;obj&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;cc&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; -o &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;prom&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;obj&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%.o:%.c &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;deps&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;cc&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; -c $&amp;lt; -o $@
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;在这里，我们用到了几个特殊的宏。首先是 &lt;code&gt;%.o:%.c&lt;/code&gt;，这是一个模式规则，表示所有的 .o 目标都依赖于与它同名的 .c 文件（当然还有 deps 中列出的头文件）。再来就是命令部分的 &lt;code&gt;$&amp;lt;&lt;/code&gt; 和 &lt;code&gt;$@&lt;/code&gt;，其中 &lt;code&gt;$&amp;lt;&lt;/code&gt; 代表的是依赖关系表中的第一项（如果我们想引用的是整个关系表，那么就应该使用 &lt;code&gt;$^&lt;/code&gt;），具体到我们这里就是 %.c。
而 &lt;code&gt;$@&lt;/code&gt; 代表的是当前语句的目标，即 %.o。这样一来，make 命令就会自动将所有的 .c 源文件编译成同名的 .o 文件。不用我们一项一项去指定了。整个代码自然简洁了许多。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
