简易makefile文件及makefile文件宏

本文介绍了一个简单的Makefile文件,详细解析了如何通过Makefile来管理C语言项目的编译过程,包括定义编译器、头文件目录、库文件路径等关键配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简易makefile文件:

 ----------------------------start file ---------------------------------------------------------------------------

CC=gcc             #定义编译器为gcc

RM = rm –f      

 

INC = .  #定义头文件目录

CFLAGS =  -Wall -std=c99

LDFLAG = -L../lib     -ltest   -lmath  #定义库文件目录  和 库文件

 

 

OBJ=HashTable.o

BIN=HashTable

 

all:$(BIN)                    #定义默认生成BIN 默认 make程序只更新makefile中的第一个目标,如果希望更新多个目标文件的话,可以使用一个特殊的目标all,假如我们想在一个makefile中更新main和hello这两个程序文件的话,可以加入下列语句达到这个目的:  all:hello main

clean:tmpclean

 

 

tmpclean:

    RM  *.o

    RM  $(BIN)

 

 

  

#%.o:%.cpp         定义编译规则 HashTable.o依赖HashTable.c

%.o:%.c

     $(CC)   -I$(INC)  $(CFLAGS) -c $<

 

 #定义默认生成BIN规则

$(BIN):$(OBJ)

    $(CC)   $(CFLAGS -o $(BIN) $(OBJ)

 ----------------------------end file ---------------------------------------------------------------------------

 

 

 参数解释:

-I参数

     -I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了

  否则报错:

 "xxxx.h: No such file or directory"

 

-l参数和-L参数

          l参数紧接是库名

          L        是库路径

放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了  但如果用其他目录的库文件 则需要-L知  识目录 

e.p.:  libtest.so在/aa/bb/cc目录下 则我们需要链接参数:-L/aa/bb/cc -ltest

    否则报错: 

     “/usr/bin/ld: cannot find -lxxx”

     如果动态库为libXXX.so    我们用-lXXX 这种方式 

     如果不是的话yangcs.so-2.0.1   有点麻烦    通常我们这么干    搞个动态连接 ln -s  libyang.so   yangcs.so-2.0.1           最后在用-lyang方式

 

makefile的内部宏:

  对“$^ $@ $<”参数的说明 

  %.o:%.c,那么$@表示xxx.o文件

                         $<表示第一个找到的.c文件

   $^:代表所有的依赖文件 $@:代表目标 $<:代表第一个依赖文件

 

 

 

gcc -O0 -g3 -Wall -c -o src\c.o ..\src\c.c
gcc -o c.exe src\c.o

 

g++ -O0 -g3 -Wall -c  -o src\cpp.o ..\src\cpp.cpp
g++ -o cpp.exe src\cpp.o

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值