Makefile中的变量使用

我想我都开始犯糊涂了。今天折腾了一个Makefile的文件,怎么写都有问题,后来发现竟然把变量和变量值这两个概念弄混了。
具体来说,正确的Makefile应该是下面这个样子的:

TARGET=test
SRC=main.c

CC=gcc

CFLAGS =-I./lib2 -I./lib1
LDFLAGS = -L./lib2 -L./lib1

LIBRARYS += -la2 -la1

LDFLAGS += $(LIBRARYS)

.PHONY: all clean


all: $(TARGET)

$(TARGET):
  $(CC) $(SRC) $(CFLAGS) $(LDFLAGS) -o $@


clean:
  @rm -f $(TARGET)

目的是编译main.c这个文件,它调用了liba2.a这个库,而liba2.a这个库又调用了liba1.a这个库。所以需要指定liba2.a的路径和对应的头文件路径。我当时想把LIBRARYS这个变量的值添加到LDFLAGS里面去,一拍脑门写成了:

$(LDFLAGS)+=$(LIBRARYS)

结果在执行make时就总是提示找不到liba2.a这个文件,当时就奇怪了,告诉它要链接liba2.a了啊,怎么不连接呢?折腾了半天后把LDFLAGS的值打印出来一看,果然是没有-la2这个链接选项,仔细看Makefile才发现,上面的赋值语句是错误的,正确的应该是:

LDFLAGS+=$(LIBRARYS)

我期望做的是给一个变量赋值,而不是给这个变量多存储的值赋值,况且这个也不是指针变量,根本就不能这么用。
结果了为了这点破事儿折腾了好半天,艹。

还有一点是,如果库2调用了库1,儿execute调用了库2,那么在编译execute的时候需要把库1和库2都链接起来,否则只链接库2的话,会提示编译失败,无法找到库1。 之所以这么说,是因为我当时以为在编译库2的时候,已经将库1的路径和库文件写到库2的Makefile里面了,库2应该就已经包含库1了,但实际情况根部不是我想的那么回事。 谨记。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值