Linux编译-GCC以及Makefile

2018-08-14  本文已影响0人  執著我們的執著

gcc

1、一个C/C++文件的编译过程,经过
预处理(preprocessing)  -> 编译(compilation) -> 汇编(assembly) -> 链接(linking)

. 文件 -> .s 文件 -> .o 文件 -> 可执行文件
示例:

(1) 预处理,生成预编译文件 ( . 文件)

 gcc -E hello.c -o hello.i

(2)编译,生成汇编代码 ( .s 文件)

gcc -S hello.i -o hello.s

(3)汇编,生成目标文件 (.o 文件)二进制文件,机器码

gcc -C hello.s -o hello.o

(4)链接,生成可执行文件,elf文件

gcc hello.o -o hello

一步到位 :gcc hello.c -o hello

2、编译选项

常用选项

选项 含义
-v 查看gcc编译器的版本,显示gcc执行时的详细过程
-o <file> 指定输出文件名为file
-E 只预处理,不编译、汇编、链接
-S 只编译,不会汇编和链接
-C 编译和汇编,不会链接
-g 编译[debug]版本 gcc hello.c -g -o hello
-O1/O2/O3 编译[优化]
3、相关补充

Q1: 如果 .h 文件和 .c 文件不在同一级目录,怎么编译?假设hello.h在hello.c的上一级目录

Q2: 如果 hello 需要使用 libpthread.so 中的函数?

Q3: 如果 hello 需要使用 /home/lib 中的 libtest.so 中的函数?


A1:
gcc hello.c -o hello -I..
编译选项 -I : 指定后面的路径为优先寻找头文件的目录路径

A2:
gcc hello.c -o hello -I.. -lpthread
编译选项 -l (-lpthread) : 寻找动态链接库文件libpthread.so(也就是文件名去掉前缀和后缀所代表的库文件,即指定 库 的名称)

A3:
gcc hello.c -o hello -I.. -L/home/lib -ltest
编译选项 -L : 指定 库的路径

-I ; -l ; -L 三大选项

makefile整理

上一篇下一篇

猜你喜欢

热点阅读