c++ - 在 OSX 和 Linux 之间共享 C++ 程序?

标签 c++ linux macos cmake

我在 Mac 上用 CLion 编写了一个相对较小的 C++ 程序。 CLion 使用CMake 编译出一个只能在我的Apple 机器上运行的可执行文件,我知道的就这么多。

我的项目包括“ncurses”库,但除此之外它只使用标准的 C++ 库。我的问题是,如何在另一台运行 Linux 的笔记本电脑上运行我的程序?在平台之间(至少在都带有 C/C++ 编译器的 Linux 和 OSX 之间)部署 C++ 应用程序的标准方法是什么? CMake 必须存在于两台机器上才能完成吗?

很抱歉提出一个非常笼统的问题,我一直在学习如何编写代码,但并没有真正学习如何分享它!

最佳答案

对于那些处于类似情况的人,我做了以下在 Mac 和 Linux 之间共享我的代码。

正如我所说,CLion 使用 CMake。我以为幕后会发生很多事情,但事实证明,编译源文件所需的只是 CMakeLists 文件和 CMake 本身的安装。

CLion 生成 CMakeLists 文件,但它可以从头开始编写,只需要大约 5 行即可开始编译。在其中声明希望包含在编译中的源文件,以及其他一些内容,例如最低 CMake 版本和项目使用的 C++ 版本。

CMakeLists 文件中的内容有很好的解释 here .

我的 Linux 机器运行 Ubuntu,我使用的 CMake 版本是 2.8.something - 与我的 Mac 上的 3.6 相比相当早。所以首先这意味着我必须将 cmake_minimum_required(VERSION 3.6) 更改为 2.8

然后我尝试在包含源文件的目录中运行 cmake .,这会向终端抛出一大堆编译错误。其中大部分涉及模板类和大括号初始化之类的内容 - 较新版本的 C++ 的功能。

这是因为 CMake 的 set(CMAKE_CXX_STANDARD 11) 语法(用于设置项目的 C++ 版本)在 CMake 2.8 中不存在。将这一行替换为 set (CMAKE_CXX_FLAGS "-std=c++11") 解决了这个问题。

另一个 cmake . 工作得很好,然后将大量文件吐出到源目录中。我不完全确定它们都做什么,但它们都围绕着一个生成的“Makefile”。在同一目录中运行 make 会编译所有源文件并输出可执行文件,效果非常好。

ncurses 库似乎非常适合类 Unix/基于 Unix 的系统,所以我可以通过简单地 #include 来使用和编译这个库我的代码。第 3 方库可能需要更多工作!

关于c++ - 在 OSX 和 Linux 之间共享 C++ 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934616/

相关文章:

php - 命令在 putty 中工作正常但在 PHP 中不使用 exec()

c - 停止从命令行启动二进制文件

c++ - 将 osx 上的默认编译器从 llvm-g++ 更改为 g++

c++ - 在 QApplication 中使用可视化检漏仪

c# - CEF 上的 WebRTC (getUserMedia) 不工作。但它适用于 Chrome。有任何想法吗?

c++ - VisualStudio MFC CListCtrl SetItemText 失败

java - 无法使用和平主义者使用 Java 1.7.0.45 在 Mac OS X 10.6.8 上运行线程 java jar 文件

c++ - 我无法在 RAD Studio C++ Builder XE 中构建静态可执行文件

linux - 比较 txt 文件中的两个目录和输出与 linux 中不同的文件名

java - 无法创建新的远程 session 。罂粟属