makefile中编译静态链接库

目录结构是,


上面的makefile是子文件夹中的makefile,下面的是外层makefile,编译的话外层的目标依赖内层文件夹的静态链接库。

上层文件夹中的makefile内容如下:

O_FILES = MQTTConnectClient.o \
 MQTTConnectServer.o \
 MQTTDeserializePublish.o \
 MQTTFormat.o \
 MQTTPacket.o \
 MQTTSerializePublish.o \
 MQTTSubscribeClient.o \
 MQTTSubscribeServer.o \
 MQTTUnsubscribeClient.o \
 MQTTUnsubscribeServer.o \


all:libmqtt.a


libmqtt.a : $(O_FILES)
ar crv $@ $^


$(O_FILES) : %.o: %.c
cc -c $<


.PHONY:
clean:
rm $(O_FILES) $@

下层文件中的makefile内容是:



SUBDIRS = $(shell ls -l | grep ^d | awk '{print $$9}')
O_FILES = network.o komect_mqtt.o transport_logic.o main.o wrap_env.o ./mqtt_protocol/libmqtt.a




all : $(SUBDIRS) komect_binary 


$(SUBDIRS) : ECHO
make -C $@


ECHO :
@echo $(SUBDIRS)


komect_binary : $(O_FILES) 
cc -o komect_binary $(O_FILES) -lpthread


$(O_FILES) : %.o: %.c
cc -c $<






.PHONY:
clean:
rm $(O_FILES)


SUBDIRS = $(shell ls -l | grep ^d)


转载自http://bbs.csdn.net/topics/390856964

先了解GCC命令行编译吧,makefile也是根据命令行的参数来编写的,你需要调用一个静态库,最简单的方法就是(假设生成test可执行文件,libcrexr64.a在当前路径)

Plain Text code
?
1
gcc -o test test.c libcrexr64.a

makefile内容如下:
Plain Text code
?
1
2
3
4
test:test.c
     gcc -o test test.c libcrexr64.a
clean:
     rm -fr *.o *~

更全面一点的命令如下:
Plain Text code
?
1
gcc -o test test.c -L. -lcrexr64

其中,-L.表示在当前目录(.)中查找函数库,-lcrexr64表示使用名为libcrexr64.a的函数库,相应的makefile你应该会自己写吧?


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Makefile将源代码编译静态库,你需要定义适当的规则来编译源文件并将其打包成静态库文件。以下是一个示例Makefile,演示如何将源代码编译静态库: ```makefile CC = g++ CFLAGS = -Wall -g # 静态库名称 LIBRARY = libmylibrary.a # 源文件 SRCS = file1.cpp file2.cpp # 目标文件 OBJS = $(SRCS:.cpp=.o) all: $(LIBRARY) $(LIBRARY): $(OBJS) ar rcs $@ $^ %.o: %.cpp $(CC) $(CFLAGS) -c -o $@ $< clean: rm -f $(OBJS) $(LIBRARY) ``` 在上面的示例,`CC`变量定义了使用的编译器(这里使用`g++`),`CFLAGS`定义了编译选项(例如`-Wall`和`-g`)。 `LIBRARY`变量定义了最终生成的静态库的名称,`SRCS`变量定义了源文件的名称。 `OBJS`变量是由源文件生成的目标文件的列表。 在上述示例,我们定义了一个名为`all`的目标,它依赖于`$(LIBRARY)`。通过运行`make all`命令,将会编译源文件并生成静态库文件。 在编译步骤,我们使用了模式规则来生成目标文件(`%.o`)。通过运行`$(CC)`编译器并使用`-c`选项编译源文件,并将结果输出到目标文件。 在链接步骤,我们使用了`ar`命令将所有目标文件打包成静态库。`-rcs`选项用于创建库文件,`$@`表示目标文件(`$(LIBRARY)`),`$^`表示所有的依赖文件(目标文件)。 最后,我们定义了一个名为`clean`的目标,用于删除生成的目标文件和静态库文件。 你可以根据实际情况修改Makefile的路径和名称,以适应你的项目。运行`make`命令将会编译源代码并生成静态库文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值