Makefile引用与环境变量

一、Makefile中的引用

一个makefile中引用另一个makefile,其写法与C语言include 类似。 make 命令开始时,会搜寻 include 所包含的其它 Makefile,并把其内容安置在当前的位置。

使用隐晦规则来书写makefile

include Makefile.hello
run: main.o hello.o test.o
    gcc -o run main.o hello.o test.o
.PHONY: clean
clean:
    -rm run *.o  
复制代码

Makefile.hello

hello.o: hello.c
    gcc -c hello.c
复制代码

运行结果:

root@chenwr-pc:/home/workspace/my_workspace/study/makefile# make run
cc    -c -o main.o main.c
gcc -c hello.c
cc    -c -o test.o test.c
gcc -o run main.o hello.o test.o
复制代码

Makefile文件可以使用其他命名来区分,如Makefile.hello,如果要单独执行Makefile.hello,只需要make -f Makefile.hello 或者 make --file Makefile.hello

include 其他makefile可包含路径,如果没有路径。

  • 优先在当前目录搜索
  • 其次如果使用make -I 路径 或者 make --include-dir 路径,会在参数指定的位置搜索
  • 最后默认路径(/usr/local/bin或者/usr/include)中搜索

如果找不到该文件,报错。

root@chenwr-pc:/home/workspace/my_workspace/study/makefile# make run
Makefile:1: Makefile.hello: No such file or directory
make: *** No rule to make target `Makefile.hello'.  Stop.
复制代码

如果打算无法找到Makefile.hello文件也要进行执行下去,只需在include前加个减号

-include Makefile.hello
复制代码

make会继续执行下去。

二、环境变量

书中提到:但是在这里我还是建议不要使用这个环境变量,因为只要这个变量一被定义,那么当你使用 make 时,所有的 Makefile 都会受到它的影响,这绝不是你想看到的。在这里提这个事,只是为了告诉大家,也许有时候你的 Makefile 出现了怪事,那么你可以看看当前环境中有没有定义这个变量。

环境变量和自定义变量 -》类似于“全局变量”和“局部变量” 创建个环境变量CWR

export CWR=666
复制代码

通过env来查看所有环境变量

Makefile中输出该变量

cwr:
    @echo $(CWR)
复制代码

@ 作用关闭命令回显 运行结果:

root@chenwr-pc:/home/workspace/my_workspace/study/makefile# make cwr
666
复制代码

在Makefile中定义该变量

CWR = 233
cwr:
    @echo $(CWR)
复制代码

运行结果:

root@chenwr-pc:/home/workspace/my_workspace/study/makefile# make cwr
233
复制代码

系统环境变量值被覆盖。 书中反复强调:不推荐把许多的变量都定义在系统环境中,这样,在我们执行不用的Makefile 时,拥有的是同一套系统变量,这可能会带来更多的麻烦。

不过我看很多厂商在编译系统镜像前,都会先source 一下厂商写的环境变量脚本。估计也是为了让每个模块共通的部分集中在环境变量中,使得模块的Makefile看起来更简洁更容易阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值