GCC / make的使用介绍(针对Visual Studio用户)

15

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

现在我的问题是:我没有Linux方面的经验。

不过,我尝试使用GCC编译了一些其他程序,并遇到了许多错误,花费了我3个小时来解决 - 可真是恐怖!

从这次经历中得出的结论是,如果我尝试将我的当前项目移植到GCC上,情况会更糟。

我的问题是:

  • Visual Studio用户需要了解哪些内容才能成功在Linux上运行程序?(我需要学习make吗?)

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


3
我建议您使用cmake,它是最接近魔法的东西。 - Kerrek SB
我建议找一个熟悉Linux和GCC的人作为你的导师/大师。 - Luc Danton
我在Windows上使用VS和gnu g++。只需使用跨平台库(如wxwidgets或qt),尽量避免使用windows.h中的任何函数,如果您希望您的程序跨平台,否则您将不得不使用大量的#ifdef来使您的程序跨平台(相信我,这是可怕的)。 - xeon111
2个回答

10

我建议完全跳过make,因为它是一种相对古老的技术,使用它可能会面临可移植性问题。相反,学习其他构建系统,比如CMakehttp://www.cmake.org/或者SConshttp://www.scons.org/

我自己使用CMake,发现它非常优秀。你只需要编写非常简单的构建脚本(你可以在一两个小时内轻松入门),它就会为你生成makefiles。最大的优点是它可以为几乎任何编译器或构建系统生成makefiles。它可以生成标准的Unix makefiles,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将生成makefiles。最简单的命令行参数是:

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
这就是你真正需要知道的!其余的内容很容易理解。即使您选择使用IDE,我也真诚地建议学习shell,它可以使您的工作更加轻松。
编辑:要将程序移植到Linux和GCC与CMake一起使用,请按照以下步骤操作:
1.获取CMake。 2.在源目录中编写CMakeLists.txt文件(这是CMake使用的Makefile格式)。 3.在目录上调用CMake。 CMake会自动解析CMakeLists.txt文件并生成您选择的构建脚本。 4.使用您所使用的任何构建系统进行构建。如果您正在使用标准Unix Makefile,则意味着只需导航到构建目录并在shell中键入make即可。 5.您的项目将被构建完成!
P.S:我从未学过普通的make,尽管它绝对有其用途。CMake在我这里找到了一个热心的用户。

2
声称“make”将您锁定到特定操作系统是误导性的,因为它在许多操作系统上都可用。我认为更正确的说法是,例如使用“make”不能保证可移植性,或者可能会遇到可移植性问题。 - Luc Danton
是的。在Linux上,make就像任何其他东西一样。当你知道你在做什么时,它很容易。 - marinara

4
我本来想说“man g++”,但是那个手册太长了。只需要输入:
g++ main.cpp utility.cpp 

g++会自动将main.cpp和utility.cpp编译链接成一个名为a.out的文件。在命令行中输入./a.out以运行编译后的代码。

你不需要学习make,但如果你学了,简单的make脚本只需要4-5行代码。这很容易打出来,但对于Visual Studio用户来说实际上有很大的区别,因此如果你在Makefile中放入糟糕的代码,它是完全不友好的。

关于学习Linux,有很多要学习的东西。我甚至不能告诉你从哪里开始,但没有秘密。不像微软产品,你必须学习解决方案才能使你的代码运行。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接