make文件示例

文件目录结构

当前目录
————————————————————————main.c
|
|
|——————————hed目录
| |
| |____________hed.h
|
|______________src目录
| |
| |____________src.c
|
|

头文件

/* hed/hed.h */
#include<stdio.h>
//这里担心会不会和main.c文件中的冲突。。。
#ifndef __HED_H__
#define __HED_H__
int  print(char* str);

#endif

源文件

/* src/src.c */
int print(char *str)
{
	printf("%s\n",str);
	return 0;
}

main文件

/* main.c*/
#include"hed.h"
int main(void)
{
	char str[] = "asdfdsfhj";
	print(str);
	return 0;
}

make文件

# CFLAGS = -Ihed -O2		# -I头文件搜索路径,-O2优化
# VPATH = src				# 源文件搜索路径,用:分隔各个路径
# OBJS = src.o main.o		# 目标文件依赖的obj文件
# TARGET = prt			# 目标文件
# CC = gcc
# RM = rm -f				# 删除命令
# $(TARGET):$(OBJS)
# 	$(CC) -o $(TARGET) $(OBJS) $(CFLAGE)
# clean:
# 	-$(RM) $(TARGET) $(OBJS
# # 没有指定OBJS文件的规则,make自动按照隐含规则形成一个规则来生成obj文件
# # 这样所有的obj文件全部在程序根目录中

## 新版make
# 函数说明
# foreach函数分别将$(DIRS)中以一个空格分隔的单词,先传递给临时变量dir,再执行$(wildcard $(dir)/*.c)命令,返回以空格分隔的所有执行结果
# wildcard函数查找当前目录下所有符合$(dir)/*.c的文件名,返回以空格分隔的所有符合模式的文件名
# patsubst函数将$(FILES)中所有符合模式%.c的字符替换为%.o,其中%代表0-n个字符

CC = gcc
RM = rm -f
CFLAGS = -O2 -Ihed
TARGET = prt
DIRS = src .
FILES = $(foreach dir,$(DIRS),$(wildcard $(dir)/*.c))
OBJS = $(patsubst %.c,%.o,$(FILES))
$(TARGET):$(OBJS)
	$(CC) -o $(TARGET) $(OBJS)
clean:
	-$(RM) $(TARGET)
	-$(RM) $(OBJS)		# "-"表示操作失败时不报错,命令继续执行

运行结果

$ make
gcc -O2 -Ihed   -c -o src/src.o src/src.c
src/src.c: In function ‘print’:
src/src.c:10:2: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
  printf("%s\n",str);
  ^~~~~~
src/src.c:10:2: warning: incompatible implicit declaration of built-in function ‘printf’
src/src.c:10:2: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
gcc -O2 -Ihed   -c -o main.o main.c
gcc -o prt src/src.o ./main.o
$ ./prt
asdfdsfhj

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值