【问题标题】:How can i setup meson and ninja on Ubuntu-Linux to produce the expected .a file by use of MakeFile?如何在 Ubuntu-Linux 上设置 meson 和 ninja 以使用 MakeFile 生成预期的 .a 文件?
【发布时间】:2021-11-18 20:56:06
【问题描述】:

几年前在 Ubuntu 16.0.4 上,我使用过这个库: git clone https://github.com/Beckhoff/ADS 并且只使用 ma​​ke 命令构建、编译,最后在主目录中我找到了一个名为 AdsLib-Linux.a 的文件可能仅此而已。

现在我在 Ubuntu 20.04 上,我再次需要这个库,但这次 ma​​ke 不会产生相同的输出,并期待我最终使用它而不是 make 的自述文件说明:

meson build
ninja -C build

现在创建一个新目录 build 但没有像以前那样在根目录上的 .a 文件。而是在构建目录 libADSLib.a 中有一个新文件。使用正确的 ma​​ke 命令也会发生同样的事情。

也许作者多年来更改了配置文件的某些内容或工具的行为发生了变化,但我无法再获取以前的文件,并且我需要它用于现在不再执行的其他引用代码。

查看 MakeFile 我发现在 example 文件夹中,与父目录中的不同,MakeFile 具有类似的内容:

$(warning ATTENTION make is deprecated and superseeded by meson)
...
${PROGRAM}: LIB_NAME = ../AdsLib-${OS_NAME}.a
...

但我尝试阅读介子和忍者指南中关于设置、配置、构建等的所有内容,都不再生成该文件。

我也尝试过先构建,然后将所有文件从示例文件夹复制到父目录,然后再次构建,但那里仍然没有 .a 文件。

如何正确配置构建过程以便创建此 -Linux.a 文件。或者如果不再可能,它现在产生什么我可以使用而不是以前产生的?

【问题讨论】:

    标签: makefile build ubuntu-20.04 ninja meson-build


    【解决方案1】:

    Meson 是一个构建系统生成器,类似于 CMake 或有点像 ./configure,您需要运行 meson,然后运行 ​​ninja 来实际构建一些东西。

    你需要同时运行介子和忍者:

    meson setup builddir
    ninja -C builddir
    

    一旦你成功了,libAdsLib.a 目录中就会有一个libAdsLib.a

    【讨论】:

    • 没关系,但问题是:如何再次获得 AdsLib-Linux.a?
    • 该项目已将文件重命名为 libAdsLib.a,但它是同一个 lib
    • 没关系。适合了解更多有关介子和构建的信息:您能否展示它在哪里可见以及如何以旧名称再次更改它?
    • 有一行:meson adslib = static_library('AdsLib', [common_files, router_files], include_directories: inc, ) 'AdsLib' 是库的名称,如果它适合平台(如 linux、*BSD 等)介子会自动添加 lib。您可以编辑 meson.build 以重命名目标。
    【解决方案2】:

    让我纠正一下@dcbaker,根据他们的README,您应该将build设置为构建目录:

    # configure meson to build the library into "build" dir
    meson build
    
    # let ninja build the library
    ninja -C build
    

    当然,一般来说,它不应该是具体的,但是他们的示例代码是以一种奇怪的方式编写的,所以这个路径是硬编码的。因此,使用示例:

    # configure meson to build example into "build" dir
    meson example/build example
    
    # let ninja build the example
    ninja -C example/build
    
    # and run the example
    ./example/build/example
    

    关于库:现在是 libAdsLib.a 并在 build 目录中生成。名称设置为here,现在采用 linux 命名风格,旧的 - 不是。所以,你有选择:

    1. 更新您使用它的配置/构建文件(Makefile?)

    2. 复制或制作符号链接,例如

      $ ln -s /build/libAdsLib.a /AdsLib-Linux.a

    以上非常依赖于你的开发环境,你有安装或设置脚本吗?您是否有权修改/配置目标应用程序的参数?您需要同时支持旧名称和新名称吗? - 许多问题与关于介子的原始问题无关。

    【讨论】:

    • 很好,很清楚,谢谢!对于解决方案,还要感谢@dcbaker 的回复,我得出了相同的第二个结论,建立了链接。因此,即使文件仍然存在,也不太可能重现以前的行为。
    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多