<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Compile on chengzhycn&#39;s blog</title>
		<link>https://blog.jinzhi.site/tags/compile/</link>
		<description>Recent content in Compile on chengzhycn&#39;s blog</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Tue, 26 Jul 2022 14:30:28 +0800</lastBuildDate>
		
			<atom:link href="https://blog.jinzhi.site/tags/compile/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>make命令和编译</title>
				<link>https://blog.jinzhi.site/posts/2022-07/make%E5%91%BD%E4%BB%A4%E5%92%8C%E7%BC%96%E8%AF%91/</link>
				<pubDate>Tue, 26 Jul 2022 14:30:28 +0800</pubDate>
				<guid>https://blog.jinzhi.site/posts/2022-07/make%E5%91%BD%E4%BB%A4%E5%92%8C%E7%BC%96%E8%AF%91/</guid>
				<description>&lt;h2 id=&#34;makefile&#34;&gt;Makefile&lt;/h2&gt;&#xA;&lt;h3 id=&#34;标准格式&#34;&gt;标准格式&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;target：dependencies1 dependencies2 ...&#xA;   recipe&#xA;&#xA;.PHONY: clean&#xA;clean:&#xA;   -rm ...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;注意事项&#34;&gt;注意事项&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;运行make时如果没有指定target，那么make会构建Makefile中的第一个target&lt;/li&gt;&#xA;&lt;li&gt;通常情况下，目标名即生成的文件名。如果一条规则的目标文件存在并且该文件比它所有的依赖都要新，那么make会跳过recipe；如果目标文件不存在，那么目标文件的 &lt;strong&gt;timestamp&lt;/strong&gt; 为开始的时间；否则timestamp为相应文件的修改时间。&lt;/li&gt;&#xA;&lt;li&gt;每次运行 &lt;code&gt;make clean&lt;/code&gt;，”clean“中的recipe都会被执行，因为clean文件永远都不会被创建。（可以使用 &lt;strong&gt;.PHONY&lt;/strong&gt; 创建伪目标使Makefile可读性更高）&lt;/li&gt;&#xA;&lt;li&gt;recipes必须用tab缩进&lt;/li&gt;&#xA;&lt;li&gt;可以通过并行的方式运行recipes：&lt;code&gt;make -j 4&lt;/code&gt;（指定并行的任务数）&lt;/li&gt;&#xA;&lt;li&gt;如果没有指定规则，Make会自动化创建规则。例如，本地有一个C文件”program.c“，当运行 &lt;code&gt;make program&lt;/code&gt;时，Make会自动编译生成 program&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;变量&#34;&gt;变量&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$@&lt;/code&gt; 目标文件&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$^&lt;/code&gt; 所有的依赖文件&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$&amp;lt;&lt;/code&gt; 第一个依赖&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;头文件&#34;&gt;头文件&lt;/h2&gt;&#xA;&lt;h3 id=&#34;环境变量&#34;&gt;环境变量&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;C_INCLUDE_PATH&lt;/code&gt; C语言头文件路径&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CPLUS_INCLUDE_PATH&lt;/code&gt; C++ 头文件路径&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;搜索路径&#34;&gt;搜索路径&lt;/h3&gt;&#xA;&lt;h4 id=&#34;include&#34;&gt;#include&amp;lt;&amp;gt;&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;先搜索 &lt;code&gt;-I&lt;/code&gt; 指定的目录&lt;/li&gt;&#xA;&lt;li&gt;然后搜索gcc的环境变量 &lt;code&gt;CPLUS_INCLUDE_PATH&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;最后搜索gcc的内定目录&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;/usr/include&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;/usr/local/include&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;include-&#34;&gt;#include &amp;quot;&amp;quot;&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;搜索当前目录，#include&amp;lt;&amp;gt;方式不会搜索当前目录&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;动态库&#34;&gt;动态库&lt;/h2&gt;&#xA;&lt;h3 id=&#34;环境变量-1&#34;&gt;环境变量&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt;  动态链接库搜索路径&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PKG_CONFIG_PATH&lt;/code&gt; .pc文件（package config）文件搜索路径&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;搜索路径-1&#34;&gt;搜索路径&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;首先在环境变量 &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; 所记录的路径中查找&lt;/li&gt;&#xA;&lt;li&gt;在程序链接时指定的 rpath 中查找，可以  &lt;code&gt;readelf binfile | grep RPATH&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;然后从缓存文件/etc/ld.so.cache中查找。这个缓存文件由/sbin/ldconfig命令读取配置文件/etc/ld.so.conf 之后生成（也可以在 ld.so.conf.d 目录下增加 &lt;em&gt;.conf 文件，里面写入库路径，在 ld.so.conf 中 include ld.so.conf.d/&lt;/em&gt;.conf ）&lt;/li&gt;&#xA;&lt;li&gt;如果上述步骤都找不到，则到默认的系统路径中查找，先是/usr/lib然后是/lib&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/masterpanda/p/5700446.html&#34;&gt;https://www.cnblogs.com/masterpanda/p/5700446.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;编译参数&#34;&gt;编译参数&lt;/h3&gt;&#xA;&lt;h4 id=&#34;-shared&#34;&gt;-shared&lt;/h4&gt;&#xA;&lt;p&gt;指定生成动态连接库&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
