【问题标题】:How to extend makefile to compose library?如何扩展 makefile 以编写库?
【发布时间】:2023-03-04 23:49:01
【问题描述】:

我有一个 makefile 可以完成我想要的编译,但我也希望它可以创建一个库,而不仅仅是目标文件。

CC=gcc
CFLAGS=-g -Wall
DEPS = tree.h
OBJ = main.o tree.o 

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

tree: $(OBJ)
    $(CC) -o $@ $^ $(CFLAGS)

clean:
    rm -f *.o tree

现在我希望生成文件是这样的:

gcc -Wall -g -c tree.c
ar -r libtree.a tree.o
gcc main.c -o main -ltree -L.
./main

我必须向现有的 makefile 添加什么?

【问题讨论】:

  • 好的,我会努力提高我的速度,但如果你知道答案,请帮助我。

标签: c compilation makefile static-libraries


【解决方案1】:

这应该做你想做的:

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

lib%.a: %.o
    ar -r $@ $^

main: $(OBJ) $(DEPS:%.h=lib%.a)
    $(CC) -o $@ $^ $(CFLAGS) $(DEPS:%.h=-l%) -L.

请注意,这只适用于 GNU Make(特别是,$(DEPS:%.h=lib%.a) 中的 % 是 GNU 特定的扩展)。

【讨论】:

  • 这将从任何 .o 文件创建一个库
  • @EarlGray 是的,我认为这是 OP 想要的。将其限制为libtree.a 要简单得多:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
相关资源
最近更新 更多