linux Make install
admin
2024-04-24 14:01:05
0

make install的实现

make                #1
make install        #2 3 4
make clean          #5

1)将源文件编译成二进制可执行文件(包含各种库文件)

2) 创建目录,将可执行文件拷贝到指定目录(安装目录)

3) 加载全局可执行的路径

4) 加全局的启停脚本

5) 重置编译环境,删除无关文件

例:在一个目录下新建一个名为main.c的C程序源文件:

#include 
#include int main(int argc, char * argv[])
{int i = 0;while (1){i++;printf("main-running--%d\n",i);fflush(stdout);sleep(1);}return 0;
}

在相同目录下,新建一个Makefile文件,这个Makefile能够实现make,make install和make clean功能,其内容如下:

TARGET:=main
OBJS:=$(TARGET).oINSTALL_PATH:=/tmp/local
USR_LOCAL_PATH:=/usr/local/bin
LOG:=/tmp/local/main.log$(TARGET):$(OBJS)install:if [ -d $(INSTALL_PATH) ];\then    echo "$(INATALL_PATH) exists";\else \mkdir -p $(INSTALL_PATH);\cp $(TARGET) $(INSTALL_PATH);\ln -s $(INSTALL_PATH)/$(TARGET) $(USR_LOCAL_PATH)/$(TARGET);\if [ ! -f $(LOG) ];\then touch $(LOG) && echo "Create Log file:$(LOG)" || (echo "cannot create $(LOG) file" && exit 1);\else \echo " $(LOG) file already exits";\fi;\echo "$(TARGET)>$(LOG) &">$(USR_LOCAL_PATH)/$(TARGET)_start;\echo "killall $(TARGET)">$(USR_LOCAL_PATH)/$(TARGET)_stop;\chmod +x $(USR_LOCAL_PATH)/$(TARGET)_start;\chmod +x $(USR_LOCAL_PATH)/$(TARGET)_stop;\ficlean:$(RM) -r $(INSTALL_PATH)$(RM) *.o $(TARGET) $(USR_LOCAL_PATH)/$(TARGET) $(LOG) $(USR_LOCAL_PATH)/$(TARGET)_start \$(USR_LOCAL_PATH)/$(TARGET)_stop.PHONY:clean install

以上内容解析:

1) 指定编译要生成的可执行文件名称为main,它依赖的对象文件为main.o。

2) make install执行时, INSTALL_PATH指定的路径不存在,则创建这个路径,并且把main从当前路径复制到INSTALL_PATH指定目录下,并且在USR_LOCAL_PATH指定路径下新建一个软连接main指向这个程序的安装路径中的main程序。如果LOG指定的文件存在,则新建一个此名称的文件。在/usr/local/bin目录下新建两个文件main_start和main_stop,其内容分别为main>/tmp/local/main.log &和killall main,作用分别是用于后台启动main以及结束main程序的。chmod是将main_start和main_stop两个脚本赋予执行权限。

3) make clean:用于清除make以及make install生成的文件和目录。

执行make && make install命令:

[root@main-machine d9]# make && make install
g++    -c -o main.o main.cpp
cc   main.o   -o main
if [ -d /tmp/local ];\
then    echo " exists";\
else \mkdir -p /tmp/local;\cp main /tmp/local;\ln -s /tmp/local/main /usr/local/bin/main;\if [ ! -f /tmp/local/main.log ];\then touch /tmp/local/main.log && echo "Create Log file:/tmp/local/main.log" || (echo "cannot create /tmp/local/main.log file" && exit 1);\else \echo " /tmp/local/main.log file already exits";\fi;\echo "main>/tmp/local/main.log &">/usr/local/bin/main_start;\echo "killall main">/usr/local/bin/main_stop;\chmod +x /usr/local/bin/main_start;\chmod +x /usr/local/bin/main_stop;\
fi
Create Log file:/tmp/local/main.log

运行main_start,用tail -f /tmp/local/main.log查看main.log的内容,每秒钟,文件多一行:

[root@main-machine d9]# main_start
[root@main-machine d9]# tail -f /tmp/local/main.log
main-running--12
main-running--13
main-running--14
main-running--15
main-running--16
main-running--17
main-running--18
main-running--19
main-running--20
main-running--21
main-running--22
main-running--23
main-running--24

用ps -f查看当前运行的进程,当前有一个名称为main的进程正在运行:

[root@main-machine d9]# ps -f
UID          PID    PPID  C STIME TTY          TIME CMD
root      473109  469614  0 14:47 pts/8    00:00:00 su
root      473115  473109  0 14:47 pts/8    00:00:00 bash
root      474988       1  0 16:04 pts/8    00:00:00 main
root      474997  473115  0 16:05 pts/8    00:00:00 ps -f

执行main_stop,用ps -f查看当前运行的进程,刚才运行的main进程,消失了:

[root@main-machine d9]# ps -f
UID          PID    PPID  C STIME TTY          TIME CMD
root      473109  469614  0 14:47 pts/8    00:00:00 su
root      473115  473109  0 14:47 pts/8    00:00:00 bash
root      475002  473115  0 16:05 pts/8    00:00:00 ps -f

用tail -f /tmp/local/main.log查看文件变化,其内容也不发生变化了。

执行make clean清除make和make install生成的文件和目录:

[root@main-machine d9]# make clean
rm -f -r /tmp/local
rm -f *.o main /usr/local/bin/main /tmp/local/main.log /usr/local/bin/main_start \/usr/local/bin/main_stop

main_start,main_stop脚本,main程序以及对象文件,都被删除了:

[root@main-machine d9]# main_stop
bash: /usr/local/bin/main_stop: No such file or directory
[root@main-machine d9]# main_start
bash: /usr/local/bin/main_start: No such file or directory
[root@main-machine d9]# ls
main.cpp  Makefile

相关内容

热门资讯

演唱会热潮将至,看演唱会旅游定... 看一场演唱会,顺便度个假,新加坡自由行进入“追星+旅行”时代 2025年下半年,新加坡的演唱会市场火...
消肿是热敷还是冰敷 消肿是热敷还是冰敷大腿被撞俩个月还没消肿有里时候还些疼,请问一下该怎么治啊?不管是关节肿了还是软组织...
初一地理知识有哪些 初一地理知识有哪些会考就是把书上的看明白就好了,内容也不多啊一楼说的对!主要就是看书,把书看会了,老...
2012百威啤酒广告歌名叫什么... 2012百威啤酒广告歌名叫什么呀,是在奥运期间,我只记得里面有一句翻成中文是珠光宝气,纸醉金迷The...
关于不讲义气的成语? 关于不讲义气的成语?忘恩负义、两面三刀、奸险小人、见利忘义、无耻之徒。簿情寡义,忘恩负义,背信弃义,...
奖励孩子的朋友圈短语 奖励孩子的朋友圈短语奖励孩子的朋友圈短语有:1、所有的荣誉都是对你努力的肯定,一份耕耘一份收获,不负...
雁引愁心去,山衔好月来.的意思 雁引愁心去,山衔好月来.的意思“雁引愁心去,山衔好月来”的意思:南飞的大雁带走我忧戚烦闷的心情,远处...
男主养了一只老虎,老虎叫雷欧,... 男主养了一只老虎,老虎叫雷欧,这本小说叫什么名字男主养了一只老虎,老虎叫雷欧,这本小说叫什么名字甜心...
有哪些是穿越类型的动画片.? 有哪些是穿越类型的动画片.?《今天开始变魔王》《不可思议的游戏》《犬夜叉》《翼,年代记》《遥远的时空...
我的家乡什么?_? 把句子补充... 我的家乡什么?_? 把句子补充完整美丽极了有水果,菜,花儿等我的家乡什么?_? 把句子补充完整我的家...
重生之后遇到歌手刀郎的是那部小... 重生之后遇到歌手刀郎的是那部小说这部小说名字叫做重生知道了。小说名重生之超能人生,第120章就有刀郎...
《欧罗巴部落》完整版在线播放 《欧罗巴部落》完整版在线播放
‘六一’美食会作文怎么写 ‘六一’美食会作文怎么写the province came to school soon,
朋友能不能信任? 朋友能不能信任?朋友能信任,首先你要先去信任你的朋友,相信有你的信任,你的朋友也不会忍心伤害你或是欺...
亲眼目睹神婆请已故人的鬼魂上身... 亲眼目睹神婆请已故人的鬼魂上身说话,这世上真的有鬼魂吗?我说有,你信吗?我说没有,你甘心吗?有缘自然...
如果你有机会回到过去,你会怎么... 如果你有机会回到过去,你会怎么做?再过几个小时,2023年就要来到我们身边了,在这辞旧迎新的时刻,我...
最让自己喜欢和遗憾的未完结小说... 最让自己喜欢和遗憾的未完结小说有哪些?来自南派三叔《盗墓笔记》,稻米们等了很久最后也没有等到书本完结...
潭柘寺的介绍 潭柘寺的介绍潭柘寺位于北京西部门头沟区东南部的潭柘山麓,距市中心30余公里。寺院坐北朝南,背倚宝珠峰...
十里荷塘望不尽,阵阵清风入心勿... 十里荷塘望不尽,阵阵清风入心勿。怎么解释?十里长的荷花塘一眼看不到尽头,一阵阵清风吹来,像是吹进人心...
请问碎片占硬盘空间吗? 请问碎片占硬盘空间吗?还有简单的说一下碎片是怎么产生的?哦,原来如此,我也知道了!哦~~~~~~~~...