c++ - 如何清理 C++ 编译器命令?

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

我尽可能地尝试搜索这样的问题,但我根本不知道如何提出这个问题。如果之前已经回答过这个问题,或者这是一个微不足道的问题,我深表歉意。我是 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 编译不同类型的程序时,我是否必须找出并使用一组特定的参数?

最佳答案

在紧要关头,您可以制作一个 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

关于c++ - 如何清理 C++ 编译器命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106641/

相关文章:

c++ - 如何将一个 vector 的元素引用复制到另一个 vector ?

c++ - 函数参数的前向使用

c++ - 在 map 中迭代 map

c++ - std::accumulate 中的无效转换

c++ - 类型安全枚举和作用域辅助函数

linux - ptrace 能否判断 x86 系统调用使用的是 64 位还是 32 位 ABI?

android - 亚行卡在 64 位 linux 操作系统上

c - UNIX 中的 SIZE 命令

c++ - 为什么列表初始化允许从 double 值转换为浮点值?

c - 测量任何编程语言的程序的时间复杂度