【问题标题】:combining pkg-config with module environment将 pkg-config 与模块环境相结合
【发布时间】:2020-05-09 14:28:05
【问题描述】:

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

【问题讨论】:

    标签: pkg-config meson-build environment-modules


    【解决方案1】:

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

    【讨论】:

    • 嗯,不是很干净,但我想只有解决方法而不是解决方案。我找到了一个我可以接受的解决方法(在介子内),但无论如何感谢您的想法!
    猜你喜欢
    • 2020-04-29
    • 2021-04-23
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多