【问题标题】:How to clean up C++ compiler commands?如何清理 C++ 编译器命令?
【发布时间】:2015-06-29 01:42:51
【问题描述】:

我尝试尽可能地搜索这样的问题,但我根本不知道如何准确地提出这个问题。如果之前已经回答过这个问题,或者这是一个微不足道的问题,我深表歉意。我是 C++ 的大(而且非常吓人!)世界的新手。未来我会尽力而为。

让我试着解释一下我的意思:

我在 Linux Ubuntu 14.04 上。在 Ubuntu 上,要编译我编写的 C++ 程序,例如,假设某个文件 myProgram.cpp,我 cd 到其目录并在终端中键入以下内容:

g++ myProgram.cpp -o myProgram

这样,我就可以输入:

./myProgram

运行我的程序。这既简单又令人满意——我从阅读 C++ Primer 中学到了这一点。在发现自己用 C++ 编写代码很舒服之后,我决定继续给自己一个项目,其中涉及使用 Image Magick,特别是它的 C++ API:Magick++。但是,现在,如果我想编译一些东西,我必须输入这个丑陋的烂摊子:

g++ `Magick++-config --cxxflags --cppflags` -o testMagick testMagick.cpp `Magick++-config --ldflags --libs`

让我的代码编译和执行。这看起来很混乱,当我试图查看 CImg 是否更好时,结果发现它需要自己的一组参数,如 -lm-lpthread-lX11。事实证明,要使用 C++11 编译,我必须编写 -std=c++0x。所以我的问题是:

有没有办法在终端中简化/清理我的编译语句,或者当我使用不同的 API 编译不同类型的程序时,我是否必须找出并使用一组特定的参数?

【问题讨论】:

  • 研究“makefiles”,也许是“cmake”,甚至是“C++ IDE linux”
  • paddy,下面对 make 文件提出了相同的建议。我会调查他们作为我的下一步!谢谢!
  • 您可能想要查看“构建”工具,例如“CMake”(cmake.org)或“Ninja”(martine.github.io/ninja)或“Scons”(scons.org)。特别是 CMake 可以为您生成 Makefile,或者它可以为 IDE 生成项目文件,它使跨平台开发变得更加容易。

标签: c++ linux c++11 compilation magick++


【解决方案1】:

在紧要关头,您可以制作一个 shell 脚本来为您执行此操作。这可以让你把杂乱的东西分开:

#!/bin/bash
IMAPI_OPTS=$(Magick++-config --cxxflags --cppflags)
IMAPI_LIBS=$(Magick++-config --ldflags --libs)

g++ $IMAPI_OPTS -o testMagick testMagick.cpp $IMAPI_LIBS

您可以将此文件称为build.sh,并使其可执行。然后,只需键入 ./build.sh 每次都会以相同的方式进行构建。

不过,这与 Makefile 的外观并不太相近,从长远来看,使用 Makefile 可能对您更好。与上述行为类似且不执行依赖性检查的最简单 Makefile 是:

IMAPI_OPTS=`Magick++-config --cxxflags --cppflags`
IMAPI_LIBS=`Magick++-config --ldflags --libs`

all:
        g++ $(IMAPI_OPTS) -o testMagick testMagick.cpp $(IMAPI_LIBS)

在这种情况下,您只需将其保存到名为 Makefile 的文件中,然后运行 ​​make 即可进行构建。

如果你有兴趣了解更多,试试这个链接:GNU make: Introduction

【讨论】:

  • 啊。那么认为对于我使用的每种项目都需要不同的编译语句,我必须为每个项目制作一个相应的 build.sh 或 MakeFile 以便快速编译,这是否正确?
  • 是的,最好将您的项目源代码保存在单独的目录中,并为每个目录提供构建脚本。 Makefile 比自定义构建脚本更常见,因为它会因错误而中止,并且可以管理依赖项等。习惯 Makefile 将帮助您了解其他项目,甚至其他类似于 GNU make 的构建系统。这是一个link to a simple Makefile template,当您的项目包含多个源文件时,您可以将其用作起点。
  • 好的,谢谢!我有点失望,没有办法每次只在终端中输入一个很好的语句,但话又说回来,我认为这要求太多了。我将研究 make 文件,特别是因为我对它们的了解很肤浅,以及它们对于编译大型项目的重要性,否则这些项目将需要很长时间。再次感谢,你帮助了一个新手。
  • 啊,你看到了IS你每次在终端中输入的一个很好的语句:make。 =) 你只需要一点点接线就可以了。
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多