BASH脚本(ok2makefile):生成带有makefile的C++ "Hello world"程序

来源:互联网 发布:java中异常处理机制 编辑:程序博客网 时间:2024/05/17 00:03

这个脚本也是闲着没事儿准备以后用的,应用场景:“在Linux下开发C++项目的时候,有时候需要临时创建一个简单的C++工程来尝试一些用法,但是全新编写一个带有makefile的hello world还是需要几分钟时间的,也是个反复的活儿,要是有个命令能够一下子生成一个目录,里边含有main.cc和makefile就好了。”

如果你也会经常遇到这种场景,到可以试试ok2makefile.sh脚本,很爽的哦!

建议用法:

Step 1: 拷贝这个ok2makefile.sh脚本到目录"~/bin"。
Step 2: 创建一个命令以备后用,当然得放在"~/.bashrc"中。
Step 3: 使用这个命令创建一个简易C++工程。

全部操作如下:

xiwang@ubuntu:~/Dev/ok2makefile$ mkdir -p ~/binxiwang@ubuntu:~/Dev/ok2makefile$ cp ok2makefile.sh ~/binxiwang@ubuntu:~/Dev/ok2makefile$ echo 'alias ok2makefile="~/bin/ok2makefile.sh"' >>~/.bashrcxiwang@ubuntu:~/Dev/ok2makefile$ . ~/.bashrcxiwang@ubuntu:~/Dev/ok2makefile$ ok2makefile -n mydemomydemo created.# 尝试使用xiwang@ubuntu:~/Dev$ ok2makefile -n mydemomydemo created.xiwang@ubuntu:~/Dev$ cd mydemo/xiwang@ubuntu:~/Dev/mydemo$ lsmain.cc  makefilexiwang@ubuntu:~/Dev/mydemo$ makeg++ -Wall -I. -D_DEBUG -c main.cc -o main.cc.og++ -D_DEBUG -L. main.cc.o -o mydemo -lpthreadxiwang@ubuntu:~/Dev/mydemo$ ./mydemoHello World!

下边就是ok2makefile.sh脚本内容:

#!/bin/bash# ok2makefile.sh, 2012-06-23 T1110# Generate a very simple project with makefile for c/c++, java, etc.# # OPTIONS#       -n name | --name name#           Name of demo, default "MyTEST"WORKDIR=$PWDwhile [ $# -ne 0 ]; do  case "$1" in    -n|--name)      ARG_NAME="$2"; export ARG_NAME      shift; shift;    ;;    -h|--help)      echo "ok2makefile -n name"      shift;      exit 0    ;;    *)      echo "error, see by <$0 -h>"      shift;      exit 0    ;;  esacdone# $1 => name  confirm_name() {  test ! -z "$1" || {    ARG_NAME="MyTEST"; export ARG_NAME  }  test ! -d "$1" || {    echo "option <-n name> is required incorrectly."    exit 1  }}confirm_name "$ARG_NAME"# mkdir $NAMEmkdir -p $ARG_NAMEcd $ARG_NAMEtouch makefiletouch main.cc# create makefilecat <<EOF >makefile# Makefile, 2012-06-23 T1110# TODO# ----------------------------------NAME        = $(echo $ARG_NAME | tr '[:upper:]' '[:lower:]')VERSION     = 1.0.0RELEASE     = 01# ----------------------------------BIN         = \$(NAME)OBJS        = \$(patsubst %.cpp,%.cpp.o,\$(wildcard \$(SRC_DIR)/*.cpp))OBJS       += \$(patsubst %.cc,%.cc.o,\$(wildcard \$(SRC_DIR)/*.cc))OBJS       += \$(patsubst %.C,%.C.o,\$(wildcard \$(SRC_DIR)/*.C))# TODO# BEGIN ----------------------------------# FoldersSRC_DIR     = .# FlagsCXXFLAGS    = -WallCXXFLAGS   += -I\$(SRC_DIR)CPPFLAGS    = -D_DEBUGLDFLAGS     = -L\$(SRC_DIR)LIBS        = -lpthread# END ----------------------------------.PHONY: all cleanall: \$(BIN)\$(BIN): \$(OBJS)\$(CXX) \$(CPPFLAGS) \$(LDFLAGS) \$^ -o \$@ \$(LIBS)# source files%.cpp.o: %.cpp\$(CXX) \$(CXXFLAGS) \$(CPPFLAGS) -c \$^ -o \$@%.cc.o: %.cc\$(CXX) \$(CXXFLAGS) \$(CPPFLAGS) -c \$^ -o \$@%.C.o: %.C\$(CXX) \$(CXXFLAGS) \$(CPPFLAGS) -c \$^ -o \$@clean:\$(RM) \$(BIN) \$(OBJS)EOF# END create makefile# create main.cccat <<EOF >main.cc#include <iostream>int main(int argc, char **argv) {  std::cout << "Hello World!" << std::endl;  return 0;}EOF# END create main.ccecho "$ARG_NAME created."exit 0


大家也参与讨论一下,是不是你也在Linux下工作的时候有一些突发奇想的需求呢?围绕“如果有一个脚本可以XXX就好了。”

原创粉丝点击