跳至正文
View Categories

1 min read

主要内容 #

  1. g++简介
  2. 命令格式
  3. 命令选项

1. g++简介 #

g++是GNU开发的C++编译器,是GCC(GNU Compiler Collection)GNU编译器套件的组成部分。另外,gcc是GNU的C编译器。
g++编译器是GCC的一部分,GCC编译工作一般分为四个步骤:
(1)预处理(Preprocessing)。由预处理器cpp完成,将.cpp源文件预处理为.i文件。

g++  -E  test.cpp  -o  test.i    //生成预处理后的.i文件

(2)编译(Compilation)。将.i文件编译为.s的汇编文件。使用-S选项,只进行编译而不进行汇编,生成汇编代码。

g++ -S test.i -o test.s         //生成汇编.s文件

(3)汇编(Assembly)。由汇编器as完成,将.s文件汇编成.o的二进制目标文件。

g++  -c  test.s  -o  test.o    //生成二进制.o文件

(4)链接(Linking)。由链接器ld,将.o文件连接生成可执行程序。

g++ test.o  -o  test.out      //生成二进制.out可执行文件

2. 命令格式 #

g++ [选项] 准备编译的文件 [选项] [目标文件]

编译单个源文件

g++ test.cpp -o test

test.cpp为需要编译的源文件,test为输出的可执行目录。

 g++ testspeaker.cpp speaker.cpp -o testspeaker

testspeaker.cpp speaker.cpp 需要编译的2个源文件。

3. 命令格式 #

关于g++的命令选项,大家可以参考g++百度百科或者GCC官方手册,或者使用man g++单独查看g++使用手册。
下面列出常用的命令选项。
(1)总体选项:

-E
    只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面。例子用法:   
    gcc -E hello.c > pianoapan.txt   
    gcc -E hello.c | more   
    慢慢看吧,一句`hello word`也要预处理成800行的代码。     
-S   
    只激活预处理和编译,就是指把文件编译成为汇编代码。例子用法: 
    gcc -S hello.c   
    将生成.s的汇编代码,可以用文本编辑器查看。    
-c    
    只激活预处理,编译,和汇编,也就是他只把程序做成obj文件。例子用法:   
    gcc -c hello.c   
    将生成.o的目标文件(object file)。 
-o
    指定目标名称,缺省的时候,gcc/g++编译出来的文件是a.out。例子如下:   
    g++ -o hello.out hello.cpp
    g++ -o hello.asm -S hello.cpp

(2)目录选项:

-I[dir]
    在你是用#include "file"的时候,gcc/g++会先在当前目录查找你所指定的头文件,如果没有找到,会到系统默认的头文件目录找。如果使用-I指定了目录,编译器会先在指定的目录查找,然后再去系统默认头文件目录查找。对于#include <file>,gcc/g++会到-I指定的目录查找,查找不到,然后再到系统默认的头文件目录查找。
-include [file]
    相当于“#include”,用于包含某个代码,简单来说,就是编译某个文件,需要另一个文件的时候,就可以   
    用它设定,功能就相当于在代码中使用#include。例子用法:   
    gcc hello.c -include /root/pianopan.h   
-I-
    就是取消前一个参数的功能,所以一般在-Idir之后使用   
-idirafter [dir]   
    在-I的目录里面查找失败,将到目录dir里面查找。
-iprefix [prefix],-iwithprefix [dir]
    一般一起使用,当-I的目录查找失败,会到prefix+dir下查找。
-L[dir]   
    编译的时候,指定搜索库的路径。比如你自己的库,可以用它指定目录,不然编译器将只在标准库的
    目录找。这个dir就是目录的名称。
-l[library]    
    指定编译的时使用的库,例子用法   
    gcc -lcurses hello.c   
    使用curses库编译连接,生成程序。  
</file>