用C++语言做Linux开发工具之粘合剂Makefile

1.makefile的作用

来源:http://os.51cto.com/art/201005/202614.html

我想通过“粘合剂”这个词来表达将多个工具粘合起来的“胶水”。例如,通过shell脚本,我们可以把OS命令,sed指令,awk指令,其它脚本文件等串联起来,发挥它们的合力。在linux C++编程中,我们不可避免地会使用用C++语言做Linux开发工具粘合剂makefile文件。通过,它我们可以把编译指令,生成文档操作,清除操作等等串联起来。从某种意义上来看,它也相当于一个粘合剂。

用C++语言做Linux开发工具粘合剂Makefile的出发点是,维护好一个项目中众多文件的依赖关系,由此得到一个源程序的拓扑图。当我们只修改图中某个结点时,重新编译时就只需要将拓扑图中关联的链路进行编译就好了。由此,大大缩短了编译的时间。make有两大概念:dependencies和rules。规则rule即针对每一个依赖关系 dependency定义一个操作规则。这个细粒度的分离,就可以使我们可以定制软件构建的行为。例如,修改使用的编译器,修改includepath, 修改libpath, 修改编译选项等等。我们常见的VC中的nmake,功能和make是类似的。

make使用的重点和难点是编写用用C++语言做Linux开发工具粘合剂Makefile文件。Makefile的语法相对其它语言来说是很不一样的,我们要特别注意TAB键和空格键的区别。有很多工具可以用来帮助我们生成Makefile。最出名的就是GNU的autoconf了。一个GNU程序的编写,需要autoscan, aclocal, autoconf, automake这四个工具。

我们知道GNU软件安装的三步曲是:./configure, make, make install。其中./configure就是根据autoconf, alocal等工具生成一个makefile文件。make指令就是调用make指令来根据makefile文件的规则来编译源程序。而make install就是执行makefile中的install规则指出的操作(一般是copy操作)。而make clean就是执行makefile中的clean规则指出的操作(一般是rm操作)。我们用Eclispe+CDT开发Managed C++ Project时,它就是通过objects.mk,subdir.mk,sources.mk三个文件来生成Makefile。我们注意观察编译时的输出信息,就可以看到显示的Makefile文件的内容。

可以说,如果想编译出跨平台的C++程序,那么用C++语言做Linux开发工具Makefile是一种最方便的机制。

OCI公司为Douglas C.Schmidt的ACE,TAO开源社区编写了一段伟大的perl脚本--MPC。它由平台信息,一个规则文件,源代码,生成用户想要的工程文件,例如Make, Nmake, Visual C++ 6, Visual C++ 7等等。Google Web Tookit, Celtix做的事情与之类似,不过它们是针对JAVA的,而MPC是针对C++的。

 

2.linux的的一个引用程序

来源:http://hi.baidu.com/allen_zhongyu/item/87a597f5df7ffab430c1992d

linux c++ 例子

sudo apt-get install build-essential

该命令执行后,从源文件安装软件所需的工具,如gcc、make、g++及其他所需软件就安装好了。

在文本编辑器中写第一个C++程序

#include <iostream> //这里不要写成<iostream.h>不然会冒出一个warning的
using namespace std;
int main() //‘::main’ 必须返回 ‘int’ 如果你想写void main的话会报error的
{
cout << "Hello world!" << endl;
return 0;
}
保存为 hellolinux.cc C++的文件格式 .cpp好像也可以
然后 (C++)调用G++ 不是(C)GCC
命令如下:
g++ hellolinux.cc -o hello //-o 参数是代表输出
运行:
./hello
就会输出:
Hello world!

 

你可能感兴趣的:(C++,linux,语言,开发工具,makefile,dependencies)