编译和链接过程

对于编译型语言:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Makefile的代码实现: ``` # 定义编译器 CC = gcc # 定义编译参数 CFLAGS = -Wall # 定义链接参数 LDFLAGS = -L./lib # 定义目标文件名 TARGET = ParseConfig # 定义源文件目录 SRC_DIR = ./src # 定义RELEASE目录 RELEASE_DIR = ./RELEASE # 定义DEBUG目录 DEBUG_DIR = ./DEBUG # 定义目标文件 OBJS = $(SRC_DIR)/main.o $(SRC_DIR)/ParseConfig.o # 定义动态库文件名 SHARED_LIB = libParseConfig.so # 定义静态库文件名 STATIC_LIB = libParseConfig.a # 默认目标 all: $(SHARED_LIB) $(STATIC_LIB) $(TARGET) # 编译生成动态库 $(SHARED_LIB): $(SRC_DIR)/ParseConfig.o $(CC) -shared -o $@ $^ cp $(SHARED_LIB) ./lib/ # 编译生成静态库 $(STATIC_LIB): $(SRC_DIR)/ParseConfig.o ar -rcs $@ $^ # 编译生成目标文件 $(TARGET): $(OBJS) $(CC) -o $@ $^ $(LDFLAGS) -lParseConfig # release目标 release: CFLAGS += -Os -DNDEBUG release: clean release: $(TARGET) mkdir -p $(RELEASE_DIR) $(CC) -o $(RELEASE_DIR)/$(TARGET) $(OBJS) $(LDFLAGS) -lParseConfig strip $(RELEASE_DIR)/$(TARGET) strip $(SHARED_LIB) # debug目标 debug: CFLAGS += -g debug: clean debug: $(TARGET) mkdir -p $(DEBUG_DIR) $(CC) -o $(DEBUG_DIR)/$(TARGET) $(OBJS) $(LDFLAGS) -lParseConfig # static_release目标 static_release: CFLAGS += -Os -DNDEBUG static_release: clean static_release: $(OBJS) $(CC) -o $(TARGET) $(OBJS) -L./lib -lParseConfig -static strip $(TARGET) # debug_release目标 debug_release: CFLAGS += -g debug_release: clean debug_release: $(OBJS) $(CC) -o $(TARGET) $(OBJS) -L./lib -lParseConfig -static # 清除目标文件和中间文件 clean: rm -rf $(TARGET) $(OBJS) $(RELEASE_DIR) $(DEBUG_DIR) $(SHARED_LIB) $(STATIC_LIB) ``` 使用方法: - 执行`make`,能够自动完成编译链接过程,生成`libParseConfig.a`,`libParseConfig.so`和`ParseConfig`程序,并将动态库拷贝到目录`./lib`下; - 执行`make release`,编译生成的`.o`文件存放于`./RELEASE`目录,编译参数包含`-Os -DNDEBUG`,链接完成之后对`libParseConfig.so`和`ParseConfig`自动进行`strip`; - 执行`make debug`,编译生成的`.o`文件存放于`./DEBUG`目录,编译参数包含`-g`,链接完成之后`libParseConfig.so`和`ParseConfig`不`strip`; - 执行`make static_release`,生成的`ParseConfig`自动`strip`,并且不依赖`libParseConfig.so`; - 执行`make debug_release`,`ParseConfig`不`strip`,并且不依赖`libParseConfig.so`; - 执行`make clean`,能够清除所有的二进制文件和中间文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值