介绍如何为Visual Studio用户使用GCC / make

时间:2011-07-23 22:05:43

标签: c++ linux visual-studio gcc cross-platform

我使用Visual Studio 2010开发了一个C ++工具,我也想在Linux系统上部署它。代码本身完全独立于平台编程,仅使用STL和标准库。

现在我的问题是:我没有使用Linux的经验。

然而,我已经尝试使用GCC编写了一些我编写的其他程序,结果是一大堆错误被扔给我,这花了我3个小时来解决 - 恐怖!

从这次经历中我注意到,如果我尝试将当前项目移植到GCC,那么即将发生同样的事情,情况会更糟。

我的问题是:

  • Visual Studio用户在Linux上成功运行程序需要了解什么? (我需要学习make吗?)

  • 您是否知道一个很好的来源,不是涵盖整个GCC / Linux编程的主题,而是特别是从Visual Studio环境切换的问题?

2 个答案:

答案 0 :(得分:10)

我建议完全跳过make,这是一项相当古老的技术,在使用它时可能会遇到可移植性问题。相反,请学习另一个构建系统,例如CMake http://www.cmake.org/SCons http://www.scons.org/

我自己使用CMake并发现它非常棒。您编写非常简单的构建脚本(您可以在一两个小时内轻松开始)并为您生成makefile。最大的优点是它可以为几乎所有你想要的编译器或构建系统生成makefile。它可以生成标准的unix makefile,Microsoft Visual C ++项目,XCode项目,Code :: Blocks项目,甚至是KDevelop和Eclipse CDT4项目。

我自己没有使用SCons,但我知道它实际上是为你构建程序并在python上运行。

Linux / Unix入门真正意味着你想要的任何东西。从Visual Studio开始可能意味着要去Eclipse或其他IDE,这就像学习新IDE一样简单,或者它可能意味着直接进入shell而忘记了你曾经知道IDE的样子。我个人的建议是坚持使用IDE- Eclipse作为行业标准非常棒,而且非常跨平台(只需获得CDT插件)。

关于GCC的主题,如果你正在编写CMake脚本,你可能不会真正自己调用它,因为CMake会生成makefile。最简单的命令行参数是:

g++ <source-files> -o <output-name> -I <another include directory> -l <library to link to>

作为一个例子:

g++ helloworld.cpp -o world.out -I /usr/include -l mylib

要从shell运行可执行文件,请导航到其中的目录并键入:

./world.out

请注意,调用g ++(即g++ helloworld.cpp)时的默认输出为a.out

这就是你真正需要知道的!其余的很容易。你会学会喜欢Unix,我真的建议学习shell,即使你走的是IDE的路径。它可以让你的生活更轻松。

编辑:所以要用CMake将程序移植到Linux和GCC,这就是你要做的:

  1. 获取CMake
  2. CMakeLists.txt文件写入源目录(CMake使用的Makefile格式)
  3. 在目录上调用CMake。 CMake将自动解析CMakeLists.txt文件并生成您选择的构建脚本
  4. 使用您使用的任何构建系统构建。如果你使用的是标准的Unix Makefile,那就意味着只需导航到build目录并在shell中键入make
  5. 你的项目将会建成并且你已经完成了!
  6. P.S:我从未学过正常的make,尽管它确实有其用途。 CMake在我身上找到了一位热切的用户。

答案 1 :(得分:4)

我打算说“man g ++”但是这本手册很长。

只需输入

即可
g++ main.cpp utility.cpp 

g ++将自动编译并将main.cpp,utility.cpp链接到名为a.out的文件中 在命令行中键入./a.out以运行已编译的代码。

你不需要学习make,但是如果你这样做,简单的make脚本只需要4-5行代码。输入相当容易,但对于视觉工作室用户来说实际上是非常不同的,所以如果你把错误的代码放在你的Makefile中,它就完全不友好了。

关于学习linux,有很多东西需要学习。我甚至不能告诉你从哪里开始,但没有秘密。与Microsoft产品不同,您必须了解解决方法以使代码运行。

哦,这里是g ++信息:http://homepages.gac.edu/~mc38/2001J/documentation/g++.html