1

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

我在回来的时候开始使用模块来根据需要轻松加载我的开发环境(即使用诸如module load foo等命令)。最近,我为我的项目采用了介子构建系统。在介子中,库被视为依赖项,而是在后台使用 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(进而是介子)知道关于依赖?

4

1 回答 1

1

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

于 2020-05-12T05:32:58.963 回答