Linux下使用一个makefile编译多目录C文件

2 篇文章 0 订阅
1 篇文章 0 订阅
CompileTest
--------Base
----------------base.c
----------------base.h                
--------Print
----------------print1.c
----------------print2.c
----------------print3.c
----------------print.h                
--------App
----------------main.c

Makefile文件:

CC = gcc
INC = -I./Print -I./Base
OBJ = obj

target: $(OBJ) $(OBJ)/main.o $(OBJ)/print1.o $(OBJ)/print2.o $(OBJ)/print3.o $(OBJ)/base.o
	cd $(OBJ) && $(CC) main.o print1.o print2.o print3.o base.o -o target.out

all: target
	$(OBJ)/target.out

$(OBJ):
	mkdir obj

$(OBJ)/main.o: App/main.c
	$(CC) -c App/main.c -o $(OBJ)/main.o $(INC)

$(OBJ)/print1.o: Print/print1.c
	$(CC) -c Print/print1.c -o $(OBJ)/print1.o $(INC)

$(OBJ)/print2.o: Print/print2.c
	$(CC) -c Print/print2.c -o $(OBJ)/print2.o $(INC)

$(OBJ)/print3.o: Print/print2.c
	$(CC) -c Print/print3.c -o $(OBJ)/print3.o $(INC)

$(OBJ)/base.o: Base/base.c
	$(CC) -c Base/base.c -o $(OBJ)/base.o $(INC)

clean: $(OBJ)/target.out
	rm $(OBJ)/target.out

介绍:

1.

CC = gcc

这是make的变量定义,后面如果要使用该变量就得这么用。其实说到底这就是C语言当中的define

$(CC)

2.

-I./Print和-IPrint是一样的,只是使用./分开看着舒服些,规范些

这个东西是gcc用来指定头文件目录的,使用方法就是在gcc编译命令行结尾加上-I./Print就行了,记住是IJK的大写I,

而不是LMN的L。小写l是用来指定库文件,大写L是用来指定库头文件目录的。

用法示例:

$(CC) -c App/main.c -o $(OBJ)/main.o $(INC)

3.

target: $(OBJ) $(OBJ)/main.o $(OBJ)/print1.o $(OBJ)/print2.o $(OBJ)/print3.o $(OBJ)/base.o
    cd $(OBJ) && $(CC) main.o print1.o print2.o print3.o base.o -o target.out

第一个$(OBJ)等价于obj,是用来判断是否有obj目录,有的话就不管,没有的话就进入下面语句新建目录。

$(OBJ):
    mkdir obj

源码下载链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值