Linux学习入门--make学习总结

1.  make的作用

可以根据模块的修改情况重新编译链接目标代码,保证目标代码都是由最新的模块组成的。

2. makefile的编写方法

  • 格式:

目标:依赖列表

    命令

注意命令左侧是Table制表位

  • 注释

语句前加#表示注释

  • @避免该行显示,因为make默认是显示执行过程的
  • \用来接续行比较长的情况,与C语言类似
  • 变量的使用,变量一般用大小字母表示,格式: 变量名 = 字符串;引用方式 $(变量名)
  • ifeq(val1,val2), else, endif

举个例子来说明

gcc_hello_world.c
--------------------------------
#include <stdio.h>
#include "print.h"

int main(void)
{
 
  print_hello();

  return 0;
}


print.c
--------------------------------
#include <stdio.h>
#include "print.h"

void print_hello(void)
{
  printf("Hello world!\n");
}

print.h
---------------------------------
#ifndef PRINT_H
#define PRINT_H

void print_hello(void);

#endif

i. Makefile代码:

hello:gcc_hello_world.o print.o
	@gcc gcc_hello_world.o print.o -o hello
gcc_hello_world.o:gcc_hello_world.c print.h
	gcc -c gcc_hello_world.c
print.o:print.c print.h
	gcc -c print.c
	
clean:
	rm -f *.o hello

其中clean是伪目标,在make参数时可以使用,执行结果如下:

214456_nmUx_3783667.png

ii. 使用变量编写Makefile

OBJ=gcc_hello_world.o print.o

hello:$(OBJ)
	gcc $(OBJ) -o hello
gcc_hello_world.o:gcc_hello_world.c print.h
	gcc -c gcc_hello_world.c
print.o:print.c print.h
	gcc -c print.c
	
clean:
	$(RM) *.o hello

-------------------------------------------------------------------------------------------------------------

明天继续宏定义的实验操作。

修改gcc_hello_world.c如下:

#include <stdio.h>
#include "print.h"

int main(void)
{
#ifdef MACRO  
  print_hello();
#endif
  return 0;
}
CC=gcc

CFLAGS += -DMACRO


TARGETS := hello

all:$(TARGETS)

OBJ=gcc_hello_world.o print.o

$(TARGETS):$(OBJ)
	$(CC) $(CFLAGS) $^ -o $@
	
gcc_hello_world.o:gcc_hello_world.c print.h
	gcc -c $(CFLAGS) gcc_hello_world.c
print.o:print.c print.h
	gcc -c print.c

clean:
	$(RM) *.o hello

:=     +=   ?= 参考文章:Makefile 中:= ?= += =的区别

$^ -o $@可以参考makefile使用说明

其实添加宏定义方法和gcc -D的命令一样。

转载于:https://my.oschina.net/xiangxyq/blog/1623762

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值