gpt4 book ai didi

c - 自动从静态库中删除文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:58 24 4
gpt4 key购买 nike

我想知道是否可以设置一个 makefile 规则,以便自动删除库中不再存在的目标文件,而无需进行干净的构建。我的 makefile 设置是这样的。

SRC_FILES = a.c b.c c.c

libtest.a : $(SRC_FILES:.c=.o)
ar -rcs $@ $?

%.o : %.c
gcc -o $@ -c $<

现在假设我从 SRC_FILES 中删除了 c.c,我希望下一次 make 运行从存档中删除相应的目标文件。有什么方法可以做到这一点而不必运行干净的构建?先删除存档然后重建它不起作用,因为当库比其所有依赖项更新时永远不会调用该规则。如果没有任何实际更改,我也不想重建库,因此将其设为 .PHONY 也行不通。

最佳答案

另一种可靠的方法是使所有目标文件、存档、共享库和可执行文件都依赖于构建它们的 Makefile。在食谱中,您可以$(filter-out Makefile,$^) 从编译器、ar 和链接器命令行中过滤掉Makefile。这最适合 non-recursive makefiles .

这样,每当您更改 Makefile 时,它都会自动重建和重新链接。一种理想的方法是仅在编译器选项更改时重建。这是可能的,但需要一些额外的努力,这可能不值得(ninja 自动完成,但由于 ninja 构建文件通常由更高级别的构建系统生成,就像 CMake 一样,这个功能几乎毫无意义)。

此外,如果您不分发.a 文件,您可能希望使用thin 归档T ar避免将目标文件不必要地复制到存档中的选项。

GNU ar can optionally create a thin archive, which contains a symbol index and references to the original copies of the member files of the archive. This is useful for building libraries for use within a local build tree, where the relocatable objects are expected to remain available, and copying the contents of each object would only waste time and space.

关于c - 自动从静态库中删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33614163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com