生成库文件的多个实例的最佳方法是什么。
例如,考虑以下示例:

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/

10-16 04:26