C++(和 C,尽管在那儿不太重要)标准规定程序中的所有翻译单元都需要具有相同的定义;这包括编译器开关之类的东西。例如,在 MSVC++ 上,必须在所有翻译单元中链接到正确版本的 C 运行时库( /MT
vs /MD
vs /MTd
vs )。/MDd
但是,我们想使用一些第三方依赖项,其中有几件事:
- 他们都使用不同的构建系统(有一个 autoconf,有一个 cmake,还有一个似乎有它自己的手卷的东西..)
- 构建系统并非都在其配置中公开这些类型的开关,并且硬编码的开关在不同的系统中设置不同。(例如,一个图书馆力量
/MD
and/MDd
,而另一个力量/MT
and/MTd
)
我们不确定处理这类事情的最佳方法是什么。我们讨论了以下选项:
- 围绕任何第三方依赖项构建我们自己的构建系统。
- PRO:我们知道事情会匹配
- PRO:我们知道我们可以以正确的方式进行跨平台支持
- CON:我们并不确切知道每个第三方构建系统是如何工作的
- 缺点:很多很多的工作
- CON:如果第三方依赖发生变化则中断
- 尝试使用第三方构建系统,并尝试修改它们以做我们需要的事情。
- PRO:似乎工作量更少
- CON:我们可能会破坏第三方系统
- CON:如果第三方依赖发生变化则中断
- CON:迫使我们自己的构建变得非常复杂
我们不知道该怎么做;我们无法相信只有我们一个人遇到这些问题。我们应该做上面的选择之一,还是我没有想到的第三种选择?