生成库文件的多个实例的最佳方法是什么。
例如,考虑以下示例:
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的多个版本
我考虑过要有一个包含所有可能需要的组合的主文件,但这将很快变得难以管理。
能以结构化的方式完成吗?做这样的事情的典型方法是什么?
最佳答案
假设您要基于现有lib.a
的内容(文件有一个副本,但是可以具有不同的内容...)来生成lib.h
,则可以执行以下操作:
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/