分享免费的编程资源和教程

网站首页 > 技术教程 正文

C语言中的make是个啥?为何php安装扩展时要用它?

goqiw 2024-10-24 12:37:42 技术教程 25 ℃ 0 评论

在安装 PHP扩展的时候,会用到一个命令make,在一些文章介绍里会这样说,如果要用编译安装的话就执行make,make install以后就会把代码编译成so文件,然后更改php.ini把extensiion加上这个so的地址,这个扩展就安装完成了,这个make倒底起什么用?

1、以C结尾的代表c语言源文件

2、gcc -c 生成的是扩展为o的文件,这些叫链接文件。

Bash
gcc *.o -o app

表示把该文件夹下所有链接文件编译成app可执行文件,然后直接./app就可以运行了。

现在写的文件少还感受不出来,以后写的文件多了,如果你改一个文件的小地方你得重新编译整个项目的话,那是不是很耗时。

这里就引用了make,make会检查源文件和目标文件的时间,目标文件过期了就重新编译它。

这里我们下载php的一个扩展swoole来看看目录情况,在文档说明中就有说要用到make,里面就有一些makefile还有头文件,虽然源码看不懂但基本知道是怎么回事儿。

其它就是一些需要实战才能用到的知识点,比如:

Bash
char是数值
long 大整数用
int 普通整数
float 一般浮点数 
double 高精度浮点数
short 小整数用


#include 如果是" "表示包含本地头文件


#include 如果是<> 表示在标准库头文件,一般在/usr/local/include/里边或在/usr/include里边,在《unix环境高级编程》这本书里的apue.h,就要放到这个文件夹下,不然你代码就运行不起来。


还有函数的声明,一般要放在main函数前面,代码少还没问题,如果代码多了,调整顺序就很麻烦,或者你需要在一个函数中调用另一个函数,你得去不断的调整顺序。

还有比如递归调用,要相互调用函数,这种怎么办?

解决办法就是把定义和声明分开。


#main.c
#include "stdio.h"
#include "encrypt.h"
int main(){
    char msg[80];
    while (fgets(msg,80,stdin)){
        encrypt(msg);
        printf("%s\n",msg);
    }
}
#encrypt.h 头文w件
void encrypt(char *message);
#encrypt.c 函数
#include "encrypt.h"
void encrypt(char *message){
    char c;
    while(*message){
        *message = *message ^ 31;
        message++;
    }
}
gcc encrypt.c main.c -o main
./main

如果要写成makefile文件呢

thruster.o:main.c thruster.c thruster.h #表示依赖文件
  gcc main.c thruster.c encrypt.c -c  #生成命令
encrypt.o:main.c encrypt.c encrypt.h
  gcc main.c encrypt.c -c
main.o:main.c thruster.c
  gcc main.c thruster.c -c
app:main.o thruster.o encrypt.o
  gcc *.o -o app
你要编译时就直接运行 make app就可以了


这里有后缀为c,h,o,makefile还有一个app可执行文件,我试图把app这个文件放到别的地方去,然后执行,发现是运行不起来的。

在看文章的时候觉得懂了,真正做起来时,发现问题多多,理解比会更重要。



本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表