makefile 将生成的目标文件和可执行文件存放在指定的目录下

.PHONY: all clean
CC = gcc
RM = rm
MKDIR = mkdir
CFLAGS = -Wall -std=gnu99


INC = -I ../include/hh_include


DIR_OBJS = ../obj
DIR_EXEC = ../exec


DIRS := $(DIR_OBJS) $(DIR_EXEC)
EXEC = prin
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)


OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS))
EXEC := $(addprefix $(DIR_EXEC)/,$(EXEC))


all: $(DIRS) $(EXEC)
$(DIRS):
$(MKDIR) $@
$(EXEC):$(OBJS)
$(CC) -o $@ $^
$(DIR_OBJS)/%.o:%.c
$(CC) $(CFLAGS) $(INC) -o $@ -c $^


clean:

$(RM) -rf  $(DIRS) $(EXEC)




解释:
1、.PHONY 修饰的目标就是只有规则没有依赖。由于makefile只能有一个目标,所以可以使用all来构造一个没有规则的终极目标。
并以可执行文件作为依赖。clean 清除所有的依赖和编译时生成的文件
2、CC RM MKDIR CFLAGS 作为变量,使用该变量的值使用$(变量名)
3、INC 指定的是编译源文件所需要的头文件的路径
4、./ 为当前目录 ../为当前目录的上一层目录
5、SRCS = $(wildcard *.c) 当前目录下的所有源文件
OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS)) 生成目标文件存放的目录
EXEC := $(addprefix $(DIR_EXEC)/,$(EXEC)) 生成可执行文件存放的目录

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成一个可执行文件Makefile通常包含以下几个部分: 1. 定义目标(target):目标是指要生成可执行文件的名称。可以使用变量来定义目标名称,例如: ``` TARGET = myprogram ``` 2. 定义依赖(prerequisites):依赖是指生成可执行文件所需要的源代码文件或其他依赖文件。可以使用变量来定义依赖文件列表,例如: ``` SRCS = main.c utils.c ``` 3. 定义编译命令(command):编译命令是指将源代码文件编译目标文件的命令。可以使用变量来定义编译命令,例如: ``` CC = gcc CFLAGS = -Wall -g $(TARGET): $(SRCS) $(CC) $(CFLAGS) -o $@ $^ ``` 在上面的例子中,`$(TARGET)`表示目标文件,`$(SRCS)`表示依赖文件列表,`$(CC)`表示编译器,`$(CFLAGS)`表示编译选项。`$@`表示目标文件,`$^`表示所有依赖文件。 4. 定义其他规则:除了生成可执行文件的规则外,还可以定义其他规则,例如清理临时文件的规则: ``` clean: rm -f $(TARGET) *.o ``` 在上面的例子中,`clean`是规则名称,`rm -f $(TARGET) *.o`是清理临时文件的命令。 通过编写上述规则,保存为名为`Makefile`的文件,然后在命令行中执行`make`命令,即可生成可执行文件。 #### 引用[.reference_title] - *1* *3* [Makefile简介与使用](https://blog.csdn.net/chongbin007/article/details/123709482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [makefile简单编写-生成可执行文件](https://blog.csdn.net/AJDJ26/article/details/79955989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值