【问题标题】:Building library with make使用 make 构建库
【发布时间】:2014-12-27 21:44:05
【问题描述】:

我有以下内容的makefile:

libcommon.a : $(COMMON_CFILES:.c=.o) filter_scan.o filter_expr.o $(META_O_FILES)
        ar rcv $@ $^

所以我对这个语法有几个小问题。

  1. 什么是 .a .so .o 扩展名?
  2. 是什么意思 $(COMMON_CFILES:.c=.o)

具体来说,.c 和 .o 是什么?

(有一个 COMMON_CFILES “标签”,(我不知道如何命名)与 .c 文件列表)

  1. 什么是ar rcv $@ $^?

【问题讨论】:

  • 建议编辑比盲目投反对票要好:)

标签: makefile


【解决方案1】:

.a 是一个静态库。它们使用ar 命令进行维护。

.so 是一个共享库。

$(COMMON_CFILES:.c=.o) 采用名为 COMMON_CFILES 的 Makefile 宏,将其拆分为单词,并在每个标记中将 .c 替换为 .o。因此它将 C 源文件名转换为它们对应的目标文件名。

.c是C源文件的后缀。

ar rcv $@ $^ 使用其依赖项中的文件更新存档 libcommon.a ($@)。 ($^)

【讨论】:

  • 好的,谢谢。我已经掌握了全貌,现在是时候阅读 mans 了。
  • 从技术上讲,$(COMMON_CFILES:.c=.o) 只作用于每个单词的结尾。它相当于$(patsubst %.c,%.o,$(COMMON_CFILES))。请参阅手册的6.3.1 Substitution References 部分。
猜你喜欢
  • 1970-01-01
  • 2013-11-23
  • 2017-05-16
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
相关资源
最近更新 更多