gcc参数介绍及makefile的使用介绍

----参考网络整理

1、gcc常用的几个参数

-o   指定可执行程序的名称                                                                                                                 //gcc -o main main.o----->main.o链接为main这一可执行程序

-c   只要求编译器输出目标代码,而不用生成可执行程序(即:只编译,不链接,只生成 .o文件)//gcc -c main.c------>生成 main.o

-g   要求编译器在编译的时候提供我们以后对程序进行调试的信息 

-Wall 允许发出gcc所有有用的报警信息

2、gcc包含的库路径及库文件

对于一些标准库来说,我们没有必要指出路径。只要它们在起缺省库的路径下就可以了。系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径。

其余的库,需要我们指定路径和库名

-l库名           //小写的L //   gcc -o temp temp.c -lm     //使用了数学函数,添加m库。

-L库路径     //大写的L  // -L/home/hoyt/mylib    

gcc -o temp temp.c  -L/home/hoyt/mylib   -lmytest

注意:库路径和库名是分开的,都要添加。

3、gcc中包含头文件

INCLUDES      =-I./include 
INCLUDES   +=-I./myinclude

 

3、makefile常用的变量及通配符

$@   目标文件

$^    所有依赖文件

$<  表示第一个依赖文件     //第一个依赖文件是.c文件。
$?  表示比目标还要新的依赖文件列表

  • 通配符符号:%

举例:

main:main.o mytool1.o mytool2.o

gcc -o $@ $^

main.o:main.c mytool1.h mytool2.h

gcc -c $<

4、链接 

$(TARGET):$(OBJ)
	@mkdir -p output
	$(CC) $(OBJ) $(INCLUDES) $(LIB_PATH) $(LIB_NAMES) -g -o output/$(TARGET)$(VERSION) -std=c++11

 //我们发现:最终生成的可执行文件为target加了版本号的,也就是说虽然 TARGET,最终是以-o为最终结果。

 5、makefile中所有的.c编译成.o文件 %.o:%.c

%.o  是指以.o结尾,当然这里也可以使用通配符*,只不过%多用于Makefile。

//作用:将后缀为.c的文件都编译成同名的.o文件

CC			=/usr/local/arm/arm-zynq-v6.2.1/bin/arm-linux-gnueabihf-g++
DEBUG 		=-DUSE_DEBUG
CFLAGS		=-Wall

%.o:%.c
    $(CC) $(INCLUDES) $(DEBUG) -c $(CFLAGS) -std=c++11 $< -o $@

 

6、makefile常用函数

1)获取匹配模式文件名函数— wildcard


“PATTERN”使用 shell可识别的通配符,包括“ ?”(单字符)、“*”(多字符)等

语法:$(wildcard PATTERN)
函数功能:列出当前目录下所有符合模式“ PATTERN”格式的文件名。
返回值:空格分割的、存在当前目录下的所有符合模式“ PATTERN”的文件名。
 

CFILES = $(wildcard *.c)  //变量CFILES 赋值为所有以.c结尾的文件。//返回的文件以空格分隔开显示的。

2)模式替换函数— patsubst 


参数 “TEXT ”单词之间的多个空格在处理时被合并为一个空格,并忽略前导和结尾空格。

语法:$(patsubst PATTERN,REPLACEMENT,TEXT)
函数功能:搜索“ TEXT”中以空格分开的单词,将否符合模式“ TATTERN ”替换为“REPLACEMENT ”。参数“PATTERN”中可以使用模式通配符 “%”来代表一个单词中的若干字符。 如果参数“REPLACEMENT ”中也包含一个“%”,那么“ REPLACEMENT ”中的“ %”将是“ TATTERN”中的那个“ %”所代表的字符串。在“ TATTERN ”和“REPLACEMENT ”中,只有第一个“ %”被作为模式字符来处理,之后出现的不再作模式字符(作为一个字符)。在参数中如果需要将第一个出现的“ %”作为字符本身而不作为模式字符时,可使用反斜杠“ ”进行转义处理(转义处理的机制和使用静态模式的转义一致,
返回值:替换后的新字符串。
FILE = A.c  B.c

FILE1 = $(patsubst %.c,%.f,$(FILE))    //把FILE变量中的以.c结尾的文件替换.c替换成.f

@echo  FILE1= $(FILE1)

 

7、命令前添加@,只显示命令结果,不显示命令

1)@echo $(A)    //打印出变量A的值,但是不显示命令 ,@的作用。

2)@mkdir - p output   //创建output文件

8、-std=c++11

This mode can be selected with the -std=c++11 command-line flag, or -std=gnu++11 to enable GNU extensions as well.

-std=c++11,支持C++11标准;

-std=gnu++11,支持C++11标准和GNU扩展特性;
 

9、makefile默认的变量

CC = gcc

CFLAGS = -g

默认变量CC 就是gcc,即使我们此处不赋值,使用时,直接用$(CC)也是可以使用的。

CFLAGS为默认的gcc编译参数变量。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值