一些Linux程序不提供程序,看似只是提供一大堆源代码,比如.c,.cpp的文件一大堆,但往往在目录中有一个makefile文件,或者把这个makefile文件惯例性地藏在build文件夹。就是提供所谓的编译版。
使用Windows编写c,c++,习惯性地在release,debug等文件夹寻找.exe的程序员可能不知道怎么对待这样的Linux编译版。
其实很简单,进入到makefile文件的目录,用Ctrl+Alt+T打开终端,一个make指令则完成编译,之后,相应的Linux可执行程序就会生成。
如果出现如下图的错误:make:***[某某程序] 错误127
则说明你的Linux没有c++编译库,
上图的黄色部分就是Ubuntu12.04没有g++编译库所提示的错误。在《【Linux】在Ubuntu12.04中写C语言与Helloworld》(点击打开链接)中虽然指出Ubuntu12.04是自带C语言的编译库的,但是并不带C++的编译库。两者的编译指令都一样,c语言是gcc,c++是g++。不以为Windows平台中C/C++可以混写,就以为gcc同样可以编译C与C++。
此时,在Ubuntu12.04安装C++编译库很简单和其它开发环境一样,如上图,同样在联网状态,一句apt-get完事
sudo apt-get install g++
之后输入密码。
等待安装完成,就能进入makefile的目录,一句make命令就能,一些Linux编译版中得到相应的程序。
那么makefile到底是什么鬼,用一个简单的例子说明这个问题。
如下图,在文件夹中有两个很简单的文件,一个helloworld.h,里面的代码简单得不能再简单了:
#include<iostream> //注意,在Linux中#include "iostream.h"时不能通过编译的 //Linux的g++不认这个,所谓的windows不标准写法 using namespace std;
然后还有一个helloworld.cpp,继承helloworld.h中的#include<iostram>与using namespace std;两行代码
#include "helloworld.h" int main(){ cout<<"helloworld"<<endl; return 0; }
本来,这个helloworld程序,在终端一个如下的命令就完成编译了:
g++ helloworld.cpp -o helloworld
但是,我把这个终端命令写在makefile中,
helloworld: g++ helloworld.cpp -o helloworld clean: rm ./helloworld helloworld.o
指明编译完成,同时删除编译的临时文件helloworld.o
此处helloworld:与clean:仅仅是行注释的作用,不用理会。
版权声明:本文为博主原创文章,未经博主允许不得转载。