Linux:如何进展c++编程

  不适应美帝的膳食,当一才咸鱼在apartment里Coding一波,学习习怎么样以Ubuntu实现C++的编程


本文如下:

(预备知识)

学习Vim: 
http://www.cnblogs.com/starspace/archive/2009/05/15/1458044.html

配置Vim: 
http://haohetao.javaeye.com/blog/690715

 

总结: 安装vim –> 配置 
/etc/vim/vimrc
文件 使得vim能够支持语法高亮、自动缩进等等功能。木即运的 vimrc
配置文件的情如下,进行基本的 c/c++ 编程已经足足了。

 

++++++++++++++++++++++++++++++++++

 

“语法高亮显示

syntax enable

syntax on    

set background=dark

set nocompatible

set number

 

“检测文件之档次

filetype on

 

“记录历史的行数

set history=1000

set cursorline

 

“set autoindent

set cindent

 

“设置C/C++语言的切实缩进方式

set
cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s

set smartindent

set expandtab     ”
使用空格代替tab.

set ts=4 “空格数量

set shiftwidth=4 “自动缩进的肥瘦

set showmatch

set cursorline

set nobackup

 

” just for encode

set
fileencodings=utf-8,gb2312,gbk,gb18030

set termencoding=utf-8

set fileformats=unix

set encoding=prc

set hlsearch    “高亮显示有匹配

 

” set foldmethod

set fdm=indent    “代码折叠

 

 

if &term==”xterm”

    set t_Co=8

    set t_Sb=^[[4%dm

    set t_Sf=^[[3%dm

endif

 

+++++++++++++++++++++++++++++++++++++++

 

vim的效应相当强劲,各人可以因自己的要求DIY这个vimrc文件,完全可以制造出特别的法力来,可以瞻仰如下内容:

 

http://blog.csdn[.NET](http://lib.csdn.net/base/dotnet)/wooin/archive/2007/10/31/1858917.aspx

 

 

 

 

(一)代码编写 

 

1。启动终端;

 

2。输入vim
test.cpp,新建了一个文件称“test.cpp”;如果先曾经立了此文件,则是打开这名字的文本。

 

3。默认进入的凡命令模式,输入
i、a、o等上编辑插入模式,分别对应于时职务之前、之后栽和插一行。 

   
如果要刨除时方编制的那么一行的内容(删除一个字符,删除一个字,删除一行),则必须按下esc键回到命令模式,分别使用x(删除一个字符)、dw(删除一个字)、dd(删除一行)来拓展删除。

   
如果假定撤回某此操作,回到命令模式,然后输入命令u(undo)来撤销操作;如果要恢复撤销的内容,则在命令模式下,输入指令”:redo”或者是”:Control键+r”,在未曾安装compatible的气象下,可以发迭底撤销和恢复;

 

4。编辑了,输入”:w”表明存盘,然后输入“:q”退出vim编辑器;也得以一直输入“:wq”直接完事就片独步骤。 

 

 

(二)代码编译运行 

 

   设“test.cpp”文件之情节是:

   #include <iostream>

   int main(int argc,char
*argv[])

   {

     std::cout << “hello,
world/n”;

     return 0;

   }

 

 

1。 对于这个.cpp文件,使用以下的一声令下进行文件的编译:

   gcc -Wall test.cpp -o  test -lstdc++
(必须长 -lstdc++ 选项用来打招呼链接器链接静态库
libstdc++.a,否则会因为找不至库函数而失误)

   
或者直接采用编译c++(.cpp)文件专用的一声令下g++,如下:

   g++ -Wall test.cpp -o  test

 

==============

 
该令将文件‘test.cpp’中之代码编译为机器码并储存在可执行文件
‘test’中。机器码的文书名是通过 -o
选项指定的,该选择通常作为命令执行中之末段一个参数。如果被简单,输出文件默认为
‘a.out’。

 

瞩目到如当前目录中及可执行文件重名的公文都是,则它用让复盖。

 

择 -Wall
开启编译器几乎拥有常用的警告──强烈建议你一味以该选项。编译器有为数不少别的告诫选项,但
-Wall 是极致常用之。默认情况下GCC/G++不见面来其他警告信息。当编辑 C 或
C++ 程序时编译器警告十分有助于检测程序是的题材。

 

本例中,编译器使用了 -Wall
选项而没有产生其他警告,因为示例程序是全合法的。

 

 

除此以外:如果同开始建了一个“test.c”的C语言路的文本,内容如下;

  #include <stdio.h>

  int main(void)

  {

    printf(“Hello, world!/n”);

    return 0;

  }

 

  编译时利用“gcc -Wall test.c -o
testc”命令。另外要注意的是,在c文件中莫克冒出c++的仓库,比如#include
<iostream.h>就见面报错,但是cpp文件包含c语言的堆栈却是可的。

 

==============

 

2. 运行:

   $ ./test

==============

   这个命令将可执行文件载入内存,并使 CPU
开始施行该包含的授命。 路径“./”指代当前目录,因此“./test”
载入并尽当前目录下的可执行文件 ‘test’。

==============

   运行结果也:hello, world

 

(三)编译多单出自文件 

 

1. 多源文件文件示例

  
将方的”test.cpp”分解为老三单例外之文书‘main.cpp’、‘test_fn.cpp’和头文件‘test.h’。

   (1)主程序‘main.cpp’如下:

   #include “test.h”

   int main()

   {

     test(“hello world!”);

     return 0;

   }

 

  
(2)函数声明文件”test.h”如下内容:

   void test(const char* name);

 

  
(3)函数实现公文”test_fn.cpp”的情如下:

    #include <iostream>

    using namespace std; 

    #include “test.h”

 

    void test(const char* name)

    {

      cout<<“Hello
World!”<<endl;

    }

 

2. 基本上文件编译

  g++ -Wall main.cpp test_fn.cpp -o
newTest 

  

=====================

   本例中,我们采用选择 -o
为可执行文件指定了一个不等之名
newTest。注意清文件‘test.h’并未在命令行中指定,这是因她曾经当main.cpp中蕴含。 

=====================

   

 

(四)简单的makeFile文件 

 make命令 从
makefile(默认是当前目录下的叫做吧‘makefile’的公文)中读取项目之叙述。makefile指定了一样名目繁多目标(比如可执行文件)和依赖(比如对象文件及来自文件)的编译规则,其格式如下:

    目标:  依赖

         命令  

   对各国一个靶,make
检查该对应之指文件修改时间来规定拖欠目标是否要利用对应的指令还树立。注意到,makefile
中命令行必须盖单个的 TAB
字符进行缩进,不克是空格(纠正:就是空格而非是TAB)。

 

GNU Make
包含众多默认的规则(参见隐含规则)来简化 makefile
的构建。比如说,它们指定‘.o’文件可以通过编译‘.c’文件得到,可执行文件可以经过以‘.o’链接到一起获得。隐含规则通过被称之为make变量的事物所指定,比如
CC(C 语言编译器)和
CFLAGS(C程序的编译选项);在makefile文件中它通过占据一行的 变量=值
的花样给装。对 C++
,其相当于价格的变量是CXX和CXXFLAGS,而变量CPPFLAGS则是编译预处理选项。

 

  1. 现行啊地方的“编译多单来自文件”示例创建一个粗略的makefile文件,内容如下:

  CXXC=g++

  CXXFLAGS=-Wall

  newTest: main.o test_fn.o 
(使用了含有规则 cpp–>o)

  clean: rm -f newTest main.o
test_fn.o

 

===================

    该makefile文件可以这么来读:使用
C++语言编译器
g++,和编译选项‘-Wall’,从目标文件‘test.o’和‘test_fn.o’生成靶子可执行文件
newTest(文件‘test.o’和‘test_fn.o’通过隐含规则分别由‘test.c’和‘test_fn.c’生成)。目标clean没有借助文件,它只是简单地移除所有编译生成的文本。rm命令的选取项
‘-f’(force) 抑制文件不存时时来的缪信息。

===================

    

   2. 假如运用该 makefile 文件,输入
make命令。不加以参数调用make时,makefile文件被的首先独对象被树,从而生成可执行文件‘newTest’,终端会发出如下输出:

 

    $ make

    g++ -Wall -c -o main.o main.cpp

    g++ -Wall -c -o test_fn.o
test_fn.cpp

    g++ main.o test_fn.o -o
newTest

  运行该可执行文件:

    $ ./newTest

    Hello, world!

 

 

  
3. 一个出自文件被修改要再转可执行文件,简单地又输入 make
即可。通过检查对象文件以及仰文件之工夫穿,程序 make
可甄别哪些文件已修改并根据对应之规则更新其相应的对象文件:

 

$ vim test.cpp
(若打开编辑器修改一下test.cpp文件)

$ make         (重新make)

g++ -Wall -c -o test.o test.c
(此时单纯make该给改的公文test.cpp)

g++ test.o test_fn.o -o newTest

 

  运行:

    $ ./newTest

    Hello, world!

   

   4.  末,移除 make
生成的文书,输入“make clean”,显示如下:

     $ make clean

     rm -f hello hello.o
hello_fn.o

 

总:
makefile文件类一个编译连接程序的批判处理公事,所有的一声令下要作的业务写进一个叫做makefile的文书中,然后利用make命令可以履此类似批处理公事之公文makefile。一个业内的
makefile文件一般含用于安装(make
install)和测试(make
check)等额外的对象。

   
本例子中提到到之事例都足够简单以至于可以了无待makefile,但是本着其余大些的次序还使
makefile文件是挺有必不可少之。

 

 

(五)链接外部库 

 

仓库是预编译的目标文件(object
files)的聚集,它们可给链接进程序。静态库以后缀为‘.a’的非常之存档文件(archive
file)存储。

 

正式体系库可在目录 /usr/lib 与 /lib
中找到。比如,在类 Unix 系统面临 C 语言的数学库一般存储吗文件
/usr/lib/libm.a。该库中函数的原型声明在峰文件 /usr/include/math.h 中。C
标准库本身蕴藏吗 /usr/lib/libc.a,它富含 ANSI/ISO C
标准指定的函数,比如‘printf’。对各个一个 C 程序来说,libc.a
都默认为链接。

 

下面的是一个调用数学库 libm.a 中 sin
函数的的例子,创建文件calc.c:

 

#include <math.h>

#include <stdio.h>

 

int

main (void)

{

    double x = sin (2.0);

    printf (“The value of sin(2.0) is
%f/n”, x);

    return 0;

}

 

尝独立由该文件特别成一个可执行文件将造成一个链接阶段的荒唐:

 

$ gcc -Wall calc.c -o calc

/tmp/ccbR6Ojm.o: In function
‘main’:

/tmp/ccbR6Ojm.o(.text+0x19): undefined
reference to ‘sin’

 

函数
sin,未当本程序中定义为不在默认库‘libc.a’中;除非叫指定,编译器也无见面链接‘libm.a’。

 

  1. 法一 

否要编译器能以 sin
链接上主程序‘calc.c’,我们用提供数学库‘libm.a’。一个容易想到但比费心的做法是在命令行中显式地指定它:

 

$ gcc -Wall calc.c /usr/lib/libm.a -o
calc

 

函数库‘libm.a’包含有数学函数的靶子文件,比如sin,cos,exp,log及sqrt。链接器将追寻所有文件来找到包含
sin 的靶子文件。一旦包含 sin
的对象文件被找到,主程序就能吃链接,一个完整的可执行文件就可深成了:

 

$ ./calc

The value of sin(2.0) is 0.909297

 

可执行文件包含主程序的机器码以及函数库‘libm.a’中
sin 对应之机器码。

 

  1. 法二 

呢避免在指令行中指定长长的路径,编译器为链接函数库提供了飞速的挑选项‘-l’。例如,下面的指令

 

$ gcc -Wall calc.c -lm -o calc

 

和我们地方点名库均路线‘/usr/lib/libm.a’的命等。

 

诚如的话,选项
-lNAME使链接器尝试链接系统库目录中的函数库文件
libNAME.a。一个巨型的主次通常如果用多 -l
选项来指定要链接的数学库,图形库,网络库等。

 

 


通过实践,发现上述措施能配置中心的gcc,但是力不从心满足-std=c++11(C++11专业),启动-std=c++11方法如下

http://blog.csdn.net/lisonglisonglisong/article/details/21947255