make 新手使用总结

 

通配符:  “*”、“?”和“[…]”

Makefile 中统配符可以出现在以下两种场合:

1. 可以用在规则的目标、依赖中,make 在读取Makefile 时会自动对其进行匹配处理(通配符展开);

2. 可出现在规则的命令中,通配符的通配处理是在shell 在执行此命令时完成的。

除这两种情况之外的其它上下文中,不能直接使用通配符。而是需要通过函数“wildcard”来实现。   SRCS_C := $(wildcard *.c)

 

如果规则的一个文件名包含统配字符(“*”、“.”等字符),在使用这样的文件时需要对文件名中的统配字符使用反斜线(\)进行转义处理。例如“foo\*bar”,在Makefile

中它表示了文件“foo*bar”。Makefile 中对一些特殊字符的转义和B-SHELL 以及C 语言中的基本上相同。

 

自动变量

“$^”代表所有通过目录搜索得到的依赖文件的完整路径名(目录 + 一般文件名)列表。

“$@”代表规则的目标。

“$<”代表规则中通过目录搜索得到的依赖文件列表的第一个依赖文件

 

编译参数

-c 编译为二进制的中间文件

-fPIC 编译为静态库

-shared 编译为动态库。编译.so文件时,不需要main函数。遇到undefined reference to `main'错误时,加上这个选项即可。

-g 增加调试信息

-ggdb 增加调试信息,使用的是GDB调试器

-o 生成目标,后面的单词是目标名称

-O0 不进行优化处理

-O 或 -O1 优化生成代码

-O2 进一步优化

-Os 优化选项,相当于-O2.5。是使用了所有-O2的优化选项,但又不缩减代码尺寸的方法

-O3 比 -O2 更进一步优化,包括 inline 函数。

-L <directory> 指定链接时查找路径,多个路径用冒号隔开

-I 指定源代码中头文件路径(大写的i)

-l<libname> 指定链接某个库(小写的L)

 

循环语法

SUBDIRS = foo bar baz
subdirs:
for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir; \
done

换成虚目标后,make可以并行处理

SUBDIRS = foo bar baz
.PHONY: subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
$(MAKE) -C $@
foo: bar

 

其他

error adding symbols: Bad value:由于编译时的选项有-fPIC和-shared,所以会出现这个问题。如果只需要编译可执行文件,就把这两个选项都删掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值