如何清理C++编译器命令
How to clean up C++ compiler commands?
我尽我所能搜索这样的问题,但我根本不知道该怎么问。如果这个问题以前已经回答过,或者这是一个微不足道的问题,我深表歉意。我对C++这个庞大的(而且相当吓人!)世界是个新手。我将来会尽力的。
让我试着解释一下我的意思:
我使用的是Linux Ubuntu 14.04。在Ubuntu上,为了编译我编写的C++程序,例如,假设一些文件myProgram.cpp,我cd到它的目录,并在终端中键入以下内容:
g++ myProgram.cpp -o myProgram
这样,我就可以键入:
./myProgram
运行myProgram。这很简单,也很令人满意——我是从阅读C++初级读本中学到这一点的。在发现自己在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++ 不会生成输出
- 如何使用传递给编译器的相同参数在 cmake 中运行命令?
- C++程序编译器在使用g++命令编译后自动运行exe文件
- 无法构建 quazip。MOC 编译器不会运行。命令行未找到相关类
- 使用 Visual Studio 2019 显示 CMake 的编译器命令行
- 将编译器命令行转换为 CMakeLists.txt用于 Casablanca Rest SDK
- 在构建过程中捕获所有编译器调用和命令行参数
- 如何在 Windows 命令提示符下使用 Dev C++ 编译器编译 c++ 程序
- C++ Visual Studio 2012 的命令行编译器
- 使用数组作为地图密钥不使用C 11编译器命令
- 如何从Windows上的命令行使用MinGW编译器
- 添加带有预处理器的编译器命令
- 通过编译器环境变量或 C 和 C++ 中的命令行标志指定库路径
- C++编译器问题:3>cl:命令行错误 D8016:'/clr'和'/arch:SSE2'命令行选项不兼容
- 将命令行实用程序的输出传递给编译器/链接器
- Visual Studio命令编译器强制64位编译
- 基本C++练习(命令提示符不显示任何 cout。无编译器错误)
- 编译器命令和GCC版本
- 让cmake传递命令行变量给编译器
- 如何从Unix命令行安装c和c++编译器,然后与Eclipse一起使用