网站首页 > 技术教程 正文
在安装 PHP扩展的时候,会用到一个命令make,在一些文章介绍里会这样说,如果要用编译安装的话就执行make,make install以后就会把代码编译成so文件,然后更改php.ini把extensiion加上这个so的地址,这个扩展就安装完成了,这个make倒底起什么用?
1、以C结尾的代表c语言源文件
2、gcc -c 生成的是扩展为o的文件,这些叫链接文件。
gcc *.o -o app
表示把该文件夹下所有链接文件编译成app可执行文件,然后直接./app就可以运行了。
现在写的文件少还感受不出来,以后写的文件多了,如果你改一个文件的小地方你得重新编译整个项目的话,那是不是很耗时。
这里就引用了make,make会检查源文件和目标文件的时间,目标文件过期了就重新编译它。
这里我们下载php的一个扩展swoole来看看目录情况,在文档说明中就有说要用到make,里面就有一些makefile还有头文件,虽然源码看不懂但基本知道是怎么回事儿。
其它就是一些需要实战才能用到的知识点,比如:
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这个文件放到别的地方去,然后执行,发现是运行不起来的。
在看文章的时候觉得懂了,真正做起来时,发现问题多多,理解比会更重要。
- 上一篇: 英文的“做”和“make”有什么区别?
- 下一篇: 从do和make的区别说起 make与do区别
猜你喜欢
- 2024-10-24 Go学习每日一问(3)-make go学习笔记github
- 2024-10-24 make是“做”,bed是“床”,那么make bed是什么意思?
- 2024-10-24 ‘make a girlfriend’可不是‘交女朋友’,理解错太尴尬了!
- 2024-10-24 记住:Make good千万不要翻译为“制造美好的事情”
- 2024-10-24 Linux之make的用法讲解 linux make怎么用
- 2024-10-24 从do和make的区别说起 make与do区别
- 2024-10-24 英文的“做”和“make”有什么区别?
- 2024-10-24 使役动词make用法 使役动词make用法归纳
- 2024-10-24 “make”和“do”的用法区别 make和do的用法区别是什么
- 2024-10-24 每日一个Linux命令解析——make linux make -j4
你 发表评论:
欢迎- 05-02谈游戏状态机的设计与实现 探讨状态机的扩展性和易用性
- 05-02算术加减超人:开启智慧与乐趣之旅
- 05-02“哥俩好”“五魁首”“六六六”行酒令和划拳方式你知道多少
- 05-02航海王燃烧意志:第三波蓝钻红包“口令答案”,新阵型不太给力
- 05-02云上行酒令,就地过大年,行酒令何时出现?这些玩法知多少?
- 05-02一听就懂:用Python做一个超简单的小游戏
- 05-02数字炸弹游戏程序 用python来实现
- 05-025-6岁儿童逆向思维发展与趣味游戏
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)