当前位置:   article > 正文

makefile 学习_makefile学习

makefile学习

makefile 学习

1-helloWorld

在这里插入图片描述

2-calc

在这里插入图片描述在这里插入图片描述

3,makefile中的变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4, Makefile中的伪目标和模式匹配

在这里插入图片描述在这里插入图片描述

5,Makefile 运行流程

保证目标是用最新的依赖生成的;
第一次完全编译,后面只编译最新的代码。
在这里插入图片描述

P7,Makefile 中编译动态连接库 .dll .so

在这里插入图片描述
动态链接库:好处是程序可以和库文件分离,可以分别发版,然后库文件可以被多处共享;
动态:运行时才加载 动态加载;
链接:指库文件和二进制程序分离,用某种特殊手段维护两者之间的关系;
库: 库文件 .dll .so

编译的动态库必须是 libxxx.so,比如 soTest.cpp --> libSoTest.so
编译动态库:g++ -shared -fPIC SoTest.cpp -o libSoTest.so
编译可执行文件:g++ -o test test.cpp -L./ -lSoTest (test.cpp必须放在动态链接库之前。g++ -o test -L./ -lSoTest test.cpp 这样错误)。
方法一:
注意:运行可执行文件时出错,是因为上面仅在编译时链接到了动态库,运行时找不到动态库,动态库的默认路径通常是/lib和/usr/lib,所以需要把当前动态库目录加载到库目录。
置当前目录加载so动态库:

  1. 临时设置:export LD_LIBRARY_PATH=./
  2. 当前用户永久设置:在~/.profile文件末尾加入两行:
					LD_LIBRARY_PATH=./
					 export LD_LIBRARY_PATH
  • 1
  • 2
  1. 所有用户永久设置:/etc/profile文件末尾加入两行:
					# set Current path for so library
					LD_LIBRARY_PATH=./
					export LD_LIBRARY_PATH
  • 1
  • 2
  • 3
				source /etc/profile 命令使/etc/profile立即生效
  • 1

方法二:编译时指定了要依赖的动态库,但是运行时,找不到.so文件
LInux默认的动态库路径配置文件 是/etc/ld.so.conf、/etc/ld.so.conf.d/*.conf、/usr/local/lib、/usr/lib
把生成的文件拷贝到动态库配置文件就可以了!!!

P8,Makefile编译静态连接库

在这里插入图片描述在这里插入图片描述

AR = ar rc —–生成静态库文件命令

在这里插入图片描述要先生成.o文件,再生成libaTest.a 文件

g++ -c:只编译不链接,只生成目标文件。Makefile有三个非常有用的变量。分别是$@,$^, < 代表的意义分别是:$ @ –目标文件, $ – 所有的依赖文件, <代表的意义分别是:$@–目标文件,$^–所有的依赖文件, <代表的意义分别是:$@–目标文件,所有的依赖文件,<–第一个依赖文件。
链接静态链接库:-L:指定搜索目录,-l:指定动态库
在这里插入图片描述

P9,Makefile中通用部分做公共头文件

1,通配符

Make命令允许对文件名,进行类似正则运算的匹配,主要用到的匹配符是%。比如,假定当前目录下有 f1.c 和 f2.c 两个源码文件,需要将它们编译为对应的对象文件。

%.o: %.c
  • 1

等同于下面的写法。

f1.o: f1.c
f2.o: f2.c
  • 1
  • 2

使用匹配符%,可以将大量同类型的文件,只用一条规则就完成构建。
在这里插入图片描述2,“ = ”
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:

x = foo
y = $(x) bar
x = xyz
  • 1
  • 2
  • 3

在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
3, “ := ”
“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

x := foo
y := $(x) bar
x := xyz
  • 1
  • 2
  • 3

在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。

P11 Makefile中调用shell命令

在这里插入图片描述

P13,Makefile中的条件判断

在这里插入图片描述在这里插入图片描述

P14,Makefile中的循环

在这里插入图片描述在这里插入图片描述

P15, Makefile中的自定义函数

在这里插入图片描述

P16,Make install 的实现

make 的作用:1,将源文件编译成二进制可执行文件(包括各种库文件);

make install 的作用:2,创建目录,将可执行文件拷贝到指定目录(安装目录);
3,加全局可执行的路径;
4, 加全局的启停脚本

make clean的作用: 5,重置编译环境,删除无关文件;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/640960
推荐阅读
相关标签
  

闽ICP备14008679号