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

时间:2017-12-22 00:50:22

标签: c++ linux macos cmake

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

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

对于非常一般的问题,我很抱歉,我一直在学习如何编写代码,但实际上并不是如何分享代码!

1 个答案:

答案 0 :(得分:1)

对于处于类似情况的人,我做了以下操作,在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的系统,所以我能够在我的代码中只使用#include来使用和编译这个库。第三方图书馆可能需要更多的工作!