#include<stdio.h>⇠ int main(void)⇠ {⇠ printf("Hello World\n"); thanks();⇠ }⇠
#include<stdio.h>⇠ void thanks(void)⇠ {⇠ printf("Thanks\n");⇠ }⇠
gcc -c hello.c thanks.c
-c 是免去连接,不然主程序调用 thanks那行会报错。c++
-c 同时会自动生成 hello.o 与 thanks.obash
gcc -o main hello.o thanks.o
在上面的基础上,假如咱们修改了 thanks.c, 咱们不须要所有从新编译, 只须要生成新的thanks.o 再与其余目标文件从新连接便可。 节省时间。函数
记得用pthread写程序的时候,编译时总要在后面加上 -lpthread 选项,这是什么缘由呢?
#include <stdio.h>⇠ int main() {⇠ float val;⇠ val = sin (3.14/2);⇠ printf("%f\n",val);⇠ }
gcc -o main lib.c -lm -L /lib -L /usr/lib
扩展名 .so, 全名为 libxxx.so
这类函数在编译的时候只添加一个 函数库的指针。在执行的时候才须要加载。
函数库的升级不须要修改其余程序。优化
ldd xxx.o 能够分析程序涉及哪些动态函数库。指针
假如咱们的一个项目又不少程序,这些程序相互引用,一些程序还使用到动态函数库。那么咱们编译的时候将分不少步进行,特别麻烦。 当咱们须要从新编译的时候,全部步骤仍是得从新来一遍。能不呢省略呢?调试
target: 目标文件1 目标文件2 ... <tab> gcc -o 目标文件1 目标文件2
仍是以上面hello.c, thanks.c 为例, 忘了的朋友能够翻页上去看一下。下面是咱们makefile:c++11
main: hello.o thanks.o gcc -o main hello.o thanks.o clean: rm -f hello.o thanks.o
能够看到,我有两个target,这两个能够在调用make的时候进行选择:code
make main make clean
其中:get
makefile当中也能够进行变量的定义,能够简化makefile的编写:源码
OBJS = main.o thanks.o main: gcc -o $@ ${OBJS} clean: rm -f ${OBJS}
常常咱们须要经过源码安装软件,那么它们安装的步骤是怎样的呢?