【问题标题】:C++ Compile on different platformsC++ 在不同平台上编译
【发布时间】:2013-07-27 23:18:02
【问题描述】:

我目前正在开发一个 C++ 命令行实用程序,以作为开源实用程序在 Github 上分发。但是,我希望下载该程序的人能够以尽可能少的步骤在任何平台(特别是 Mac、Linux 和 Windows)上轻松编译和运行该程序。假设只需对代码进行少量更改以使其与各种独立于平台的 C++ 编译器(g++ 和 win32)兼容,我该怎么做? makefile 是否相关?

【问题讨论】:

  • 我知道那里有很多构建系统,由于广泛的支持,我仍然喜欢 CMake。如果您仍然使用 QT,那么 qmake 似乎是有意义的。我在预制方面也有一些很好的经验。最后,您可以自行决定喜欢哪种工具。那里有很多,如果您觉得您当前的工具不适合它,您可以随时查看Wikipedia list
  • 代码的哪些部分可能依赖于平台?图形?文件路径?图书馆?
  • 文件路径是肯定的。它是一个命令行实用程序,因此图形不是问题。至于库,这些是我的包含语句:#include <iostream> #include <fstream> #include <libgen.h> #include <string> #include <regex> using namespace std;
  • 要扩展 @PeterT 的评论,您可以查看元构建系统,如 CMake 和 Premake。这个想法是编写和维护一个构建脚本,而不管目标平台如何。然后,您可以使用该构建脚本生成目标特定的 makefile 或项目文件,然后将其提供给构建工具。
  • @DanielH。他们需要 premake 本身,因为没有它构建脚本就无法工作。就像没有 make 工具,makefile 自己不会做任何事情。最后我检查了一下,虽然 premake 并没有那么大,所以为了方便起见,你可能可以将它包含在你的项目中。

标签: c++ cross-platform


【解决方案1】:

我的建议是,不要使用 make 文件,为大型项目维护文件很乏味,有时会发生错误,您不会立即发现(因为 *.o 文件仍然存在)。

看到这个问题here

【讨论】:

  • 虽然我同意你对大型项目的看法,但我的项目非常简单且易于维护,我不希望我的用户必须安装新软件(例如 Python,用于 SCons)来运行我的实用程序。
  • 请出示一些证据。 (相当于)Makefile 是事实上的行业标准。 make 可能是相对基础的,但它仍然是 C++ 工具链中不可或缺的一部分,也是一个不错的选择。
  • 因为它发生在我身上,很容易忘记更改目标文件的一些愚蠢要求。我不想在这里争论这个
【解决方案2】:

Makefile 确实是高度相关的。您可能会发现(至少)需要两个不同的 makefile 来弥补您拥有不同编译器的事实。

很难具体说明如何解决这个问题,因为这取决于项目的复杂程度。编写脚本/批处理文件可能是最简单的,只需记录“在 Linux/Unix 上使用命令 build.sh,在 Windows 上使用 build.bat”) - 然后让各个文件处理,例如设置名称编译器和标志等。

或者您可以在 makefile 中包含一个包含内容,这由架构决定。或不同的makefile。

如果项目真的很简单,提供一个基本的 makefile 可能就足够了 - 但不太可能,因为在 Linux/MacOS 上编译 x.cpp 会生成一个名为 x.o 的目标文件,在 windows 上,目标文件是称为 x.obj。库有不同的名称,dll 有不同的名称,并且在 Linux/MacOS 上,最终的可执行文件(通常)没有扩展名,因此它被称为“myprog”,其中 Windows 下的可执行文件被称为“myprog.exe”。

这些差异意味着makefile需要不同。

【讨论】:

  • 您能否提供一个实现此多 makefile 解决方案的项目示例(可能在 Github 上)?
  • 不是我的头顶。我知道我过去下载过具有几个不同 makefile 的源,例如“makefile.unix”和“makefile.win32”。通常,在设置了一些基本配置之后,该 makefile 会包含一个包含主要部分的通用文件。
  • 我想我根本不应该写一个答案,因为你实际上并没有很好地定义你的问题是什么——你尝试了什么,你在哪里挣扎等等。
  • 不,你的回答是有道理的。这是我第一次部署这样的命令行实用程序,所以我不知道从哪里开始。但似乎 makefile 或脚本/批处理文件是要走的路
  • 任何拥有 Windows 编译器的人都会拥有 nmake(Microsoft 的工具)或 gmake(作为 MingW 或 Cygwin 的一部分)[也可以称为 makegnumake,但应该有成为一个]。当然,在他们的机器上没有编译器的人将无法使用“编译您自己的”实用程序。对于那些想要在 Windows 上使用您的实用程序但又不想下载/安装编译器仅将其用于一个项目的人,您可能需要考虑使用辅助“交付现成的 .exe”。
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多