生成多个库文件实例的最佳方法是什么。 例如,考虑以下示例:
Lib.h (Inst1) Lib.h (Inst2)
¦ ¦
----------------------
¦
Lib.c
¦
----------------
¦ ¦
FolderA FolderB
(Lib.a) (Lib.a) -> Here are 2 different instances of the library
注意:两个版本的 Lib.a 名称相同但内容不同。 例如,当包含包含不同的#define 值时,可能会发生这种情况:
#define VAR1 0 -> Defined in Lib.h (Inst1)
#define VAR1 5 -> Defined in Lib.h (Inst2)
=> 几个版本的 Lib.a
我曾想过拥有一个包含所有可能的组合所需的主 makefile,但这很快就会变得难以管理。
这可以以结构化的方式完成吗?执行此类操作的典型方法是什么?
最佳答案
假设您要根据现有lib.h
的内容生成lib.a
(该文件只有一个拷贝,但可以有不同的内容...),你可以这样做:
target_dir = $(shell some commands to figure out desired target dir from lib.h)
all: ${target_dir}/lib.a
%/lib.a: common/lib.h
@echo doing some commands to build lib.a
这会根据 lib.h 的内容在正确的目录中构建 lib.a。
另一方面,如果您有多个 lib.h 拷贝,那么您想要的效果如下:
%/lib.a: %/lib.h
@echo doing some commands to build lib.a from $^
最后,如果目录名称不对齐,您可以使用一系列规则来映射它:
FolderA/lib.a: Inst1/lib.h
FolderB/lib.a: Inst2/lib.h
%/lib.a:
@echo doing some commands to build lib.a from $^
如果你想基于某个数组或类似的东西生成多个版本的 lib.h,那就是另一回事了......
关于c++ - 生成库的多个实例的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47453391/