g++

gcc and g++分别是GNU的c & c++编译器。

1.gcc/g++在执行编译的时候一般有下面4步:

⒈预处理,生成.i的文件[预处理器cpp]。
⒉将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]。
⒊由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]。
⒋连接目标代码,生成可执行程序[链接器ld]。

2. 编译单文件

g++ main.cpp [-o target_file_name]

例如:

g++ test.cpp -o main

生成单个文件很简单,可通过-o参数指定生成文件名称。不指定则默认生成a.out文件。

3. 编译同目录下多个文件

├── myproject
│ ├── xzj.cpp
│ ├── test.cpp
│ ├── test.h

g++ xzj.cpp test.cpp -o main.out

4. 编译不同目录下多个文件(一次性、参数-I)

还是上面的代码,目录结构改了,将test.cpp、test.h放到test文件夹下:

├── myproject
│ ├── xzj.cpp
│ ├── test
│ │ ├── test.cpp
│ │ ├── test.h

g++ xzj.cpp ./test/test.cpp -Itest -o main.out

因为test.cpp、test.h和main.cpp不在相同文件夹内,所以需要指定cpp文件地址及.h文件所在目录。
-I :指定头文件所在目录。

5. 编译不同目录下多个文件(分步)

文件结构与4一致。
4需要指定具体的文件,而且每次编译的时候需要把所有的cpp文件都编译一次,有时候我们只改一个文件并不需要全部重新编译。我们可以将源文件编译成一个.o汇编代码文件,最后再链接再链接在一起。

目录结构:

复制代码
├── myproject
│ ├── xzj.cpp
│ ├── test
│ │ ├── test.cpp
│ │ ├── test.h
│ ├── object
复制代码
生成test.o到objectj目录中:

g++ -c ./test/test.cpp -Itest -o ./obj/test.o

生成可执行文件:

g++ xzj.cpp ./obj/test.o -o main.out

6. g++的步骤总结:

+预处理(-E)
+编译(-S)
+汇编(-c)
+链接
链接图

7.常用命令参数

选项解释
-ansi只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。
-c只编译并生成目标文件。
-DMACRO以字符串”1”定义 MACRO 宏。
-DMACRO=DEFN以字符串”DEFN”定义 MACRO 宏。
-E只运行 C 预编译器。
-g生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY连接时搜索指定的函数库LIBRARY。
-m486针对 486 进行代码优化。
-o FILE生成指定的输出文件。用在生成可执行文件时。
-O0不进行优化处理。
-O或 -O1优化生成代码。
-O2进一步优化。
-O3比 -O2 更进一步优化,包括 inline 函数。
-shared生成共享目标文件。通常用在建立共享库时。
-static禁止使用共享连接。
-UMACRO取消对 MACRO 宏的定义。
-w不生成任何警告信息。
-Wall生成所有警告信息。

8.执行程序

输入./main.out即可执行

转载于:https://www.cnblogs.com/xzj8023tp/p/11188508.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值