這個指令碼也是閑著沒事兒準備以後用的,應用情境:“在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就好了。”