我正在开发一个复杂的 C 生态系统,其中不同的包/库由不同的人开发。
我想创建一个名为foobar
。这个项目uses两个图书馆,一个图书馆foo
和图书馆bar
.
很遗憾,bar
不需要相同的版本foo
需要。两者都使用say
所以有冲突。
如果所有包都在带有子模块的 Git 上,则foobar
递归克隆时无法构建项目,因为两个say
函数存在于不同的翻译单元中。所以submodule
策略不起作用。
我的问题是:如何管理one使用的项目two不同版本的same静态库(*.a
)?
结构
foobar
|
.----'----. <---- (require)
v v
foo bar
(v1.0) | | (v2.0)
'-> say <-'
项目 foobar 需要该库foo
和图书馆bar
,这两个库都使用say
包裹:foo
需要版本 1 和bar
需要版本 2。
Packages
say
// say.h
void say(char *);
foo
// foo.c
#include "say.h"
void foo(void) {
say("I am foo");
}
bar
// bar.c
#include "say.h"
void bar(void) {
say("I am bar");
}
foobar
// main.c
#include <stdlib.h>
#include "foo"
#include "bar"
int main() {
foo();
bar();
return EXIT_SUCCESS;
}