我在 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/