[编译环境][Bash]一个简单的项目管理系统(逐步完善)

该项目提供了一个名为Project.sh的脚本,用于根据模板创建新的C++项目。脚本会验证项目名,复制模板文件,并用实际项目名替换占位符。Makefile中包含了编译、运行、打包和清理等目标。此外,还展示了如何自定义Makefile规则。
摘要由CSDN通过智能技术生成

一个简单的项目管理系统(逐步完善)

Project.sh

#! /bin/bash

# Project.sh
# Writed by Huo Yun(cloudblaze@yeah.net)
#
# 1. 2022-10-01 20:58 Implement creation project with template.
# 2. 2022-12-31 21:37 Output message when use unknown command.


# Create project
function createProject()
{
	# Verify the name of the new project.
	if [ $# -lt 1 ]
	then
		echo "What is the name of the new project?"
		return 1
	fi

	echo -n "Create the new project $1 ... "

	# Copy project template.
	cp -r ./Demo_Template ./$1
	# Adjust the parameters in template
	sed -i 's/<Project_Name>/'$1'/g' ./$1/Makefile

	echo "Done!"
}

# Verify the command
if [ $# == 0 ]
then
	echo "Usage: Project.sh <command> [<argument>]"
	exit 1
fi

case "$1" in
	# Create new project
	"new") createProject $2
	exit $?
	;;
	*) echo "Unknown command '$1'"
	;;
esac

Demo_Template/Makefile

ROOT				= $(shell pwd)
export RULE_FILE	= $(ROOT)/Makefile.rule

include $(RULE_FILE)

CXXFLAGS	+=
LDFLAGS		+= `pkg-config --libs fmt`

PROJECT_NAME	= <Project_Name>
all: $(PROJECT_NAME)

SOURCES = $(shell ls *.cpp)
include $(SOURCES:.cpp=.d)

$(PROJECT_NAME): $(SOURCES:.cpp=.o)
	$(CXX) $^ -o $@ $(LDFLAGS)
	
.PHONY: run zip clear_screen clean

run: $(PROJECT_NAME)
	@echo "==========" $(shell date +"%F %T") "=========="
	@./$(PROJECT_NAME)

zip: clean clear_screen
	zip -r $(PROJECT_NAME)_$(shell date +%Y%m%d%H%M%S).zip . -x $(PROJECT_NAME)_*.zip

clear_screen:
	clear

clean:
	rm -f *.d \
		*.o \
		$(PROJECT_NAME)

Demo_Template/Makefile.rule

CXX			= g++
CXXFLAGS	= -Wall -std=c++20
LDFLAGS		= 

%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

%.a: %.o
	$(AR) $(ARFLAGS) $@ $^

%: %.o
	$(CXX) $^ -o $@ $(LDFLAGS)

%.d: %.cpp
	@set -e; rm -f $@; \
	$(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

Demo_Template/main.cpp

#include <iostream>

int main(int argc, char *argv[])
{
	std::cout << "hello, world!" << std::endl;

	return EXIT_SUCCESS;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值