shell和makefile学习:编译当前目录下的.c或.cpp文件及执行对应生成的可执行文件

本文介绍了如何利用makefile和shell脚本来自动化编译及执行当前目录下的C或C++源文件。对于大型工程,推荐使用makefile,只需一行`make -j12`即可多核编译。shell脚本则简化了单个文件的编译和运行过程,方便快捷。

前言:

编写背景:最近重新开始拿起书本继续学习,因此避免不了敲打一些书本上的代码进行测试,从而达到进一步加深印象的目的。

编译大型的工程来说最适合使用makefile来编译,只需写好makefile文件,然后在命令行上敲make即可(小技巧:可以通过多核编译来提高效率 命令为make -j12)

makefile实现:(目前支持C++编译)

文件路径:头文件及源文件默认放在同一个路径下(可以自行修改),makefile编译完成后会生成可执行文件,可执行文件还需要自行运行。

#!/bin/bash
# version: v0.0.1
# author: guozh
# mailbox: 810170156@qq.com

# ======== makefile path =======

#源文件路径
CompliePath = ./
#可执行文件保存路径
SaveExecutableFilePath = ../bin/
#生成的可执行文件名字
ProjectName = test.exe
CHEADSOURCE = $(CompliePath)
BinPath = $(SaveExecutableFilePath)$(ProjectName)

# ==== code Complie style ======

SOURCE = $(wildcard $(CompliePath)*.cpp)
OBJECT = $(patsubst %.cpp, %.o, $(SOURCE))
CC = gcc
CPULS = g++
CFLAG = -Wall 
CLDLIBRARY= 

# =========== Build ============

all: Build Clean

Build:
        $(CPULS) $(SOURCE) -c -I $(CHEADSOURCE)   
        $(CPULS) $(OBJECT) -o $(BinPath) $(CFLAG) $(CLDLIBRARY) 
        @echo "========== Build finish =========="

# =========== Clean ============

Clean:
        rm -rf $(OBJECT)  
        @echo "========== Clean finish =========="

注: wildcard是展开./*.cpp所有.cpp文件,patsubst是将SOURCE里所有的.cpp后缀替换为.o

Shell实现:

总是敲打gcc xxx.c -o xxx麻烦,并且又要./xxx执行,于是就偷点懒用脚本来代替这个步骤:

v2.0.1
新添加一键编译debug并且进入debug调试(最好先安装gdb)
修复了第二个参数为空时,导致脚本错误的bug。
使用方法:
./make.sh 编译文件(必选) 参数(可选)

以下是脚本内容:
make.sh
#!/bin/bash

Translater=g++                      //此处修改所使用的编译器gcc或g++

if [ $# -lt 1 ] ;then
        echo "Please follow up file.c!"
    echo "eg: ./make.sh xxx.c"
        exit
fi

if [[ $2 = "debug" ]] ;then         //编译并进入调试模式
    FILE2=$1
    NAME=${FILE2%.*}
    ${Translater} -g ${FILE2} -o ${NAME}
    gdb ${NAME}


else                                //编译并直接运行
    FILE1=$1
    NAME=${FILE1%.*}      
    ${Translater} ${FILE1} -o ${NAME} 

    if [ -r ${NAME} ] ;then
        echo " test file is creature,Over! ";
        ./${NAME}

    else
        echo " Error!"
    fi

fi

注:前提是程序需要编译的通过,如果要一键编译C++文件的话,则需要修改编译器gcc为g++。

写完后记得给权限chmod a+x make.sh即可,想直接make.sh就需要自己手动修改bash的环境变量咯。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值