我想知道在项目中包含库的“正确”方法是什么。 我试图将 llvm core 与我的项目集成,我注意到源代码有许多 cmake 文件。 如果我想将其与我的项目集成(基于万花筒教程的编译器前端), 我应该将我的项目转换为 cmake 吗? 如果是这样,我如何将该库包含在我的构建中? 有任何“有效”的替代方案吗?
一般来说,正确的做法是不这样做。 这样做的原因是因为它使安装了依赖项的人更容易在他们的系统中安装和集成您的包。
您应该使用类似
pkg-config
之类的工具来从正在运行的系统中查找依赖项。
Meson 构建系统对此提供了出色的支持,
pkg.m4
提供了可供您使用的 autoconf
宏,并且 CMake 提供了 FindPkgConfig
。
一些软件包不使用
pkg-config
,而是提供类似的-config
样式脚本。 IIRC、LLVM 就是其中之一。它们通常还提供可与构建系统一起使用的宏,但如果没有,它们也很容易正确调用。
Meson 还支持 LLVM 依赖项:https://mesonbuild.com/Dependency.html#llvm
IIRC,LLVM 项目还提供了一个 FindLLVM.cmake 文件,如果您最终选择 CMake,您可以使用它(但是,在我看来,CMake 与大多数构建系统相比是一个很大的降级)。