【问题标题】:How to produce a configure script for windows with autotools如何使用自动工具为 Windows 生成配置脚本
【发布时间】:2021-04-09 19:53:03
【问题描述】:

我正在用 C++ 编写应用程序,并且正在使用自动工具制作构建脚本。最终用户将能够在源目录中运行./configure && make && make install。我的问题是:可以在 Windows 上使用相同的命令吗?如果没有,我如何使用 autotools 实现类似的过程?还是 autotools 无法为 windows 生成构建脚本?如果是这样,哪个构建工具可用于 windows ?提前致谢!

【问题讨论】:

    标签: windows gnu-make configure autotools


    【解决方案1】:

    我认为您不了解实际问题,所有建议使用 MSYS、Cygwin 或 WSL 的人也不了解。在 WSL 中运行 bash 配置脚本与在真正的 Hyper-V linux VM 中运行它有什么区别?没有。 WSL 和它的朋友正在提供一个 LINUX 环境,一个真正的 VM 也是如此。在配置脚本或随后的 makefile-s 中有操作系统检查吗? VM 会说,“我是 linux!” WSL 也是如此。有一个符号检查,它存在于 linux 上,但不存在于 Windows 上? WSL 会说,“无论如何!符号存在!”有一个“size_t”的检查?是的,它就在那里!但不是,因为 msvc 只知道“SIZE_T”(大写字母)。

    所以我在 linux 上运行 configure + make。好的,我创建了所有必要的 .config.h 文件,我得到了 make SHELL="/usr/bin/bash -x" 详细输出。除了所有的变量都是错误的,因为一切都是针对 linux + clang 的!所以我必须手动重新运行所有检查,修复配置文件

    #define HAVE_STRTOK_R
    

    不,等等,该死的,Windows 上没有 strtok_r!

    #define HAVE_DIRENT_H
    

    不,MSVC 中没有 dirent.h!

    #define HAVE_LONG_LONG
    

    应该在那里……对吧?

    #define SIZEOF_WHATEVER x
    

    等一下……让我检查一下……

    然后我必须将所有 makefile 介子转换成 cmake 文件,最后我可以使用 MSVC 构建。那么所有这些 *.am 和 *.m4 文件呢?神秘的东西,我不知道它们是什么。 cmake 适用于所有系统,但网络上 90% 的代码使用配置脚本 + make,没有 cmakelists.txt 适合您,没有 *.vcxproj 文件,没有 nmake 文件,Windows 没有!

    交叉编译?不是解决方案。 linux VM的架构可以与主机windows系统之一相同,amd64等,问题是,linux构建系统检查linux上的clang,但我需要的是检查MSVC。所以,linux 脚本检查可见性属性,clang 说是,MSVC 说不。

    所有这些修复都需要花费大量时间。所以问题仍然存在。如何有效地为 MSVC 调整 linux 构建系统,而不浪费时间和学习用于构建系统的 20 种语言?不,我不会使用其他编译器为 Windows 构建。他们对 Windows 了解多少,MS 什么也没告诉他们。

    【讨论】:

    • 虽然这并不能直接回答我的问题,但我学到了很多关于 Windows 的东西,并且笑了很多次! :) 谢谢你,嗯,喜剧?回答!
    【解决方案2】:

    同样的命令可以在windows上使用吗?

    Autoconf 将configure 作为可移植 (POSIX) shell 脚本生成。 Windows 没有标准的 POSIX shell,也没有 Autotools 配置脚本和 makefile 所依赖的任何标准工具。 Windows 也没有提供适合与 Autotools 构建的 makefile 一起使用的 make 实现标准,据我所知,Visual Studio 也没有提供。

    您可以很容易地在 Windows 上的 WSL 容器中构建和运行您的项目,但这不会让您获得本机 Windows 可执行文件。

    如果您想在 Windows 上使用 Autotools 构建系统来生成 Windows 可执行文件,那么您最好的选择可能是依赖 msys2mingw-w64。这些结合在一起,可以提供在 Windows 中本地运行的标准 POSIX 环境,能够通过常用命令构建 Windows 库和可执行文件。但请注意,这种方法意味着任何想要在 Windows 上构建项目的人都必须先安装这些或类似的组件。

    如果没有, 如何使用 autotools 实现类似的过程?或者是自动工具 无法为 Windows 生成构建脚本?

    Autotools 生成面向类 Unix 操作系统的构建系统,包括(但不限于)Linux 和 MacOS。此类构建系统不适用于 Windows 机器,除非添加了相当大的第三方组件套件,例如 msys2 和 mingw-x64 可以提供。

    如果是这样,哪个构建 工具可以用于windows吗?

    CMake 是一个更典型的选择,如果您希望构建与 Windows 和 Unix 的兼容性。这通常会代替 Autotools,而不是除了它们之外,因为谁愿意为同一个项目维护多个独立的构建系统?

    【讨论】:

    • meson 会是 CMake 的可接受替代品吗?由于某种原因,我不喜欢 CMake……
    • @Programmer,我绝不是要暗示 CMake 是您唯一的选择。根据我的经验,它是迄今为止构建系统最常用的工具,必须同时支持 Windows 和各种 Unix,但 meson 确实在同一个领域发挥作用。
    猜你喜欢
    • 2017-03-15
    • 2018-07-01
    • 2016-02-09
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多