【问题标题】:How to correctly release a C++ console application for different operating systems?如何正确发布适用于不同操作系统的 C++ 控制台应用程序?
【发布时间】:2022-01-22 03:24:46
【问题描述】:

POV:现在是 2022 年。您开发了一个名为“cowsay”的控制台应用程序,并在 Windows 10 机器上使用 clang++ 对其进行了编译。代码如下:

#include<iostream>

using std::cout;
using std::cerr;
using std::endl;

int main(int argv, char** argc)
{
    if ( argv > 1) {
        for (int i = 1; i < argv; ++i)
            cout << "the cow said: " << argc[i] << endl;
    } else {
        cerr << "Usage: cowsay [word]" << endl;
    }
    return 0;
}

它在您的机器上完美运行,但现在您想将它分发给 Alice(使用最新的 MacOS)和 Bob(使用最新的 Ubuntu)。你是怎么做的?

您已经看到 conan(即 C/C++ 包管理器)的存在似乎允许轻松分发,但必须要求人们安装 conan 才能运行您的应用程序看起来很麻烦。有更好的解决方案吗?大多数人使用什么解决方案?是否可以让用户通过他们在这些系统中习惯使用的工具(例如,chocobrewapt-get 等)安装您的应用程序?您能否让clang++ 从您的机器上针对 Alice 和 Bob 的机器,或者您是否需要在每次发布时都借用他们的 Ubuntu 和 MacOS 计算机?有没有什么好书可以解决开发中这个非常烦人的 (imo) 部分(例如,可能类似于 21st Century C 的前几章,涵盖了打包您的项目之类的内容)?

P.S.我在网站上发现了类似的问题,但没有一个真正解决 C++ 控制台应用程序的端到端分发策略,所以我决定问我的第一个 stackoverflow 问题而且,好吧,希望是最好的! ????

【问题讨论】:

  • 哦,可爱的爱丽丝和鲍勃……这是密码学练习吗?
  • @TedLyngmo,不,这实际上是一个真正的问题。想试一试吗? ;D
  • 抱歉,这个时候我的问题太多了,但是玩家 Alice 和 Bob 听起来很熟悉 :)
  • @DanChiarlone clang++ 本身是如何最终在多个操作系统上可用的?那是如何分发/安装的等?具有讽刺意味的是,您正在使用的程序 (clang++) 也是一个控制台应用程序,可在多个操作系统上使用。
  • 这是一个很好的问题~我只在 Windows 上运行 clang++,但是,当然,我知道它分布在任何地方。无论如何,我不熟悉他们如何设法跨多个目标进行分配。您是要尝试引导我找到解决方案吗?哈哈

标签: c++ operating-system console-application release clang++


【解决方案1】:

为不同的机器编译 C++ 应用程序的真相是:如果你有那台机器并在其中编译,效果最好。

无论如何,这并不意味着您需要物理上拥有那台计算机。例如,为了设置我想象中的 cowsay 项目,我使用了 travis-ci(即,用于构建和测试托管在 GitHub 和 Bitbucket 上的软件项目的服务)并轻松启动了三个 VM 以创建 Windows、Linux 和 OSX发布——免费!有了这个,我设法在 GitHub 上发布了我的版本(仍然使用 travis-ci),一切都很好。

接下来,为了方便用户安装,我决定编写自己的 shell 和 PowerShell 脚本,这些脚本可以直接从网络上使用curl/iex 运行(很大程度上受到Homebrew's 设置的启发)。

无论如何,这里有一些对我有帮助的资源:

  1. 为多个操作系统设置 travis-ci:https://docs.travis-ci.com/user/multi-os/
  2. 使用 travis-ci 发布 GitHub:https://docs.travis-ci.com/user/deployment/releases/
  3. Homebrew 用于安装的大量注释的 shell 脚本:https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh

附: travis-ci 对你可以免费做多少有限制。如果您想要替代它,我建议您查看 GitHub Actions。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2011-01-26
    • 2013-07-20
    • 2014-12-20
    相关资源
    最近更新 更多