- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试设置 Makefile 以根据目标文件扩展名构建静态 (.a) 和动态 (.so) 库。
我以前只将以下 Makefile 用于静态库:
NAME := config
LIB := lib$(NAME).a
SRC := $(wildcard *.c)
OBJ := $(SRC:.c=.o)
CFLAGS += -W -Wall
.PHONY: all clean fclean re
all: $(LIB)
clean:
@$(RM) $(OBJ)
fclean: clean
@$(RM) $(LIB)
re: fclean all
$(LIB): $(LIB)($(OBJ))
ranlib $@
我的主要目标是能够通过仅更改 LIB
和 NAME
变量来编译多个库。
一切正常,所以我为动态库添加了以下内容:
LDFLAGS += -shared
%.so: CFLAGS += -fPIC
%.so: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
并通过以下通用规则更改了 $(LIB):
规则:
%.a: %.a($(OBJ))
ranlib $@
如果我将 LIB
更改为 lib$(NAME).so
一切都按预期工作,但使用 .a
扩展名,打印我这个错误:
制作:*** 没有制作目标“libconfig.a”的规则,“全部”需要。停止。
我找到的唯一解决方案是添加另一个显式规则:
%.a($(OBJ)): $(OBJ)
$(AR) rv $@ $^
现在一切正常。
但添加此显式规则可防止我仅依赖 GNU make 的隐式规则,并使我显式调用 ar,这是我想避免的。
这是某种错误还是我遗漏了什么?
GNU Make 3.82
Built for x86_64-unknown-linux-gnu
最佳答案
一些快速测试似乎表明这无法完成。专门的 make 存档支持似乎是一个 makefile 解析时间功能。也就是说,文字存档名称必须存在于实际的 makefile 中才能生效。
我尝试了几种变通方法,但无法使它们中的任何一种正常工作。我能做到的最接近的是:
$(foreach a,$(filter %.a,$(MAKECMDGOALS) $(.DEFAULT_GOAL)),$(eval $a: $a($$(OBJ)); ranlib $$@))
它不适用于 all
的默认目标,但如果默认目标是库名称和/或如果库名称是显式 make 目标,则可以。您也可以在其中粘贴任何其他已知的库名称,然后它们甚至可以作为其他目标的隐式要求工作,但这是一个手动过程。
关于c - GNU 使用 stem 制定隐式归档规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22662501/
我需要帮助制定 SQL 语句。这些表是 视频(video_id,描述,价格,category_id) 类别(category_id,描述) 查询需要生成一个摘要列表,显示属于每个类别的视频数量。未分配
我正在 Angular 1.5 中构建一个应用程序,并且我自己完成所有 CSS 等工作。到目前为止,我一直在通过在所有 html 模板中包含以下代码来处理错误和成功消息 然后我在处理错误/成
这是我在检查器上看到的: 两个规则中有一个左高亮,这是 Firefox 正在编写的规则,如果我查看计算样式,我会看到: 最后这是原始 CSS 的样子: 所以 Firefox 正在以某种方式改变位置和宽
我有两个系统 A 和 B。A 是 TCP Client,向 B 上的 TCP Server 发送消息。 ------------------ --------------
我是安卓新手。我想从 MainActivity.class 接收整数和字符串,并将其打印在 DisplayMessageActivity.class 中。从我在网上找到的所有解决方案中,他们说我应该使
我请求帮助了解如何使用 javax.persistence.criteria 包制定“in”条件。 我正在根据 Contacts 类的搜索条件创建 CriteriaQuery。一个联系人可以属于 0
我正在使用具有浮点坐标的 3D 向量进行计算。有时,我想检查一个向量是否非零。但是,对于 float ,总是有可能出现舍入错误。 Python 中是否有一种标准方法来检查 float 是否足够接近于零
这是一个愚蠢的问题,但我试图通过 Google、代码片段、教程来解决这个问题,所有这些都引导我找到一些示例,其中模型对于我想要执行的编码来说太浅了。 我想开发一个应用程序,其中数据采用 parent
我是一名优秀的程序员,十分优秀!