将 pkg-config 与模块环境相结合

combining pkg-config with module environment

如果我对 pkg-config 和环境模块的理解有些不正确,这个问题可能没有多大意义,但无论如何我都会问,因为我找不到关于这个主题的任何具体内容。可能有更好的解决方案可用,如果是这样的话,我洗耳恭听!

我之前开始使用模块来根据需要轻松加载我的开发环境(即使用 module load foo 等命令)。最近,我在我的项目中采用了介子构建系统。在 meson 中,库被视为依赖项,而是在后台使用 pkg-config 找到它们。所以现在我有两种方法来发现库并设置它们的 lib 和 include 目录。

例如,我有以下(简化的)库 foo 模块脚本(我使用的是基于 lua 的 lmod):

prepend_path("LD_LIBRARY_PATH", "/opt/foo/lib")
prepend_path("CPATH", "/opt/foo/include") 

我也可以有一个 pkg-config 文件 (*.pc) 做类似的事情(也就是说,如果我对 pkg-config 的理解是正确的)

prefix=/opt/foo
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: foo
Cflags: -I${includedir}
Libs: -L${libdir} -lfoo

现在两者似乎都在做几乎相同的事情(在设置我的环境方面),但是简单地使用模块文件将不允许介子找到我的依赖项,我仍然必须使用 pkg-config(这需要基本上是手动或动态地创建两个文件,但这听起来像是一种维护负担,而且也不是很干净)。同样,我可以创建 pkg-config 文件并将该文件的位置添加到 PKG_CONFIG_PATH,即

prepend_path("LD_LIBRARY_PATH", "/opt/foo/lib")
prepend_path("CPATH", "/opt/foo/include")
prepend_path("PKG_CONFIG_PATH", /path/to/*.pc/file) 

但这同样需要两个文件(pkg 和模块)。我更喜欢模块环境,所以不想放弃它,所以有没有更好/更干净的做事方式,我只加载一个模块文件,它将允许 pkg-config(进而介子)知道关于依赖?

截至今天,环境模块和 pkg-config 工具之间没有桥梁。我认为保持模块系统可以实现的最好的事情是拥有一个脚本来查询每个可用的 pkg-config 文件并创建相应的模块文件。 运行 定期编写脚本以保持同步。