如果我对 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(进而是介子)知道关于依赖?