【问题标题】:Introduction to use of GCC / make for Visual Studio usersVisual Studio 用户使用 GCC/make 的介绍
【发布时间】:2011-10-11 19:53:18
【问题描述】:

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

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

然而,我尝试让我编写的其他一些程序使用 GCC 进行编译,结果是一大堆错误被抛出,我花了 3 个小时才解决 - 太可怕了!

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

我的问题是:

  • Visual Studio 用户需要知道什么才能成功让他们的程序在 Linux 上运行? (我需要学习make吗?)

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

【问题讨论】:

  • 我应该推荐cmake,这是最接近魔法的地方。
  • 我建议找一个熟悉 Linux 和 GCC 的人作为你的导师/大师。
  • 我在 windows 上使用 VS 和 gnu g++。只需使用跨平台库(例如 wxwidgets 或 qt),如果您希望您的程序是跨平台的,请尽量避免使用 windows.h 中的任何函数,否则您将不得不使用大量#ifdef 来使您的程序跨平台(相信我,这太可怕了)。

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


【解决方案1】:

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

我自己使用 CMake,发现它非常棒。您编写非常简单的构建脚本(您可以在一两个小时内轻松上手),它会为您生成 makefile。最大的优势是它可以为您想要的几乎任何编译器或构建系统生成 makefile。它可以生成标准的 unix makefile、Microsoft Visual C++ Projects、XCode Projects、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,即使您确实走上了 IDE 的道路,我也强烈建议您学习 shell。它可以让您的生活更轻松。

编辑:因此,要将您的程序移植到 Linux 和使用 CMake 的 GCC,您将执行以下操作:

  1. 获取 CMake
  2. 在源目录中写入CMakeLists.txt 文件(CMake 使用的 Makefile 格式)
  3. 在目录上调用 CMake。 CMake 将自动解析 CMakeLists.txt 文件并生成您选择的构建脚本
  4. 使用您使用的任何构建系统进行构建。如果您使用的是标准的 Unix Makefiles,这意味着只需导航到构建目录并在 shell 中输入make
  5. 您的项目将被构建并完成!

P.S:我从来没有学过普通的make,虽然它肯定有它的用途。 CMake 在我身上找到了一个热切的用户。

【讨论】:

  • 声称make 将您锁定到特定操作系统具有误导性,它可以在很多地方使用。我觉得这样说会更正确,例如使用make 并不能保证可移植性,否则可能会遇到可移植性问题。
  • 是的。 make 就像 linux 上的任何东西一样。当您知道自己在做什么时,这很容易
【解决方案2】:

我本来想说“man g++”,但那本手册的行很长。

只需输入

g++ main.cpp utility.cpp 

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

你不需要学习 make,但如果你学习了,简单的 make 脚本只需要 4-5 行代码。输入起来很容易,但对于 Visual Studio 用户来说,它实际上是完全不同的,所以如果你将错误的代码放入 Makefile,它是完全不友好的。

关于学习 linux,有很多东西要学。我什至不能告诉你从哪里开始,但没有秘密。不像 Microsoft 产品,您必须学习使代码运行的变通方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多