multitarget
This commit is contained in:
parent
65bc945f66
commit
f4f215a4cb
1 changed files with 94 additions and 102 deletions
120
ch
120
ch
|
@ -1,40 +1,26 @@
|
||||||
#!/bin/zsh
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
########################################################
|
###########################################################
|
||||||
## edit thease variables to match your project structure
|
## edit thease variables to match your project structure ##
|
||||||
########################################################
|
###########################################################
|
||||||
BUILD_DEBUG_FOLDER="build/debug"
|
BUILD_FOLDER="build"
|
||||||
BUILD_RELEASE_FOLDER="build/release"
|
DEFAULT_BUILD_TYPE="debug" # "debug" or "release"
|
||||||
DEFAULT_BUILD_TYPE="d" # "d" for debug and "r" for release
|
TARGETS=["{{project-name}}"]
|
||||||
DEFAULT_TARGET="{{project-name}}" # should be the name of the executable beeing built, this is used for the run action
|
|
||||||
|
|
||||||
#######################################################################################
|
##########################################################################################
|
||||||
## this is where the script starts you should not need to edit anything below this line
|
## this is where the script starts you should not need to edit anything below this line ##
|
||||||
#######################################################################################
|
##########################################################################################
|
||||||
|
#
|
||||||
if [ -n "$TARGET" ]; then
|
NC="\033[0m"
|
||||||
DEFAULT_TARGET=$TARGET
|
|
||||||
fi
|
|
||||||
|
|
||||||
NC="\033[0m" # No Color
|
|
||||||
COLOR="\033[1;33m"
|
COLOR="\033[1;33m"
|
||||||
|
|
||||||
if [ -z "$1" ]
|
zparseopts -D -E -F -- d:=debug r:=release t+=target h:=help || exit 1
|
||||||
then
|
|
||||||
echo "No action specified"
|
|
||||||
echo "run cmakehelper.sh help for more info"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $1 in
|
if (( $#help > 0 )); then
|
||||||
"init" | "-i" | "--init")
|
echo "Usage:"
|
||||||
SCRIPT_PATH=$(realpath $0)
|
echo " ./ch actions [options]"
|
||||||
cp -f $SCRIPT_PATH ./cmakehelper.sh
|
echo ""
|
||||||
echo "Initialized cmakehelper.sh edit the variables at the top of the script to match your project structure"
|
echo "Actions:"
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
"help" | "-h" | "--help")
|
|
||||||
echo "Possible actions are:"
|
|
||||||
echo " c - clean project"
|
echo " c - clean project"
|
||||||
echo " g - generate cmake files"
|
echo " g - generate cmake files"
|
||||||
echo " b - build project"
|
echo " b - build project"
|
||||||
|
@ -44,74 +30,80 @@ case $1 in
|
||||||
echo ""
|
echo ""
|
||||||
echo "actions can be chained so gbr will first run generate then build and then run"
|
echo "actions can be chained so gbr will first run generate then build and then run"
|
||||||
echo ""
|
echo ""
|
||||||
echo "second argument is the build type, possible values are d or debug and r or release"
|
echo "Options:"
|
||||||
echo "if no build type is specified then DEFAULT_BUILD_TYPE is used"
|
echo " -d, --debug Builds cmake in debug mode"
|
||||||
echo "build type is required for all actions (accept if you have the same folder for bouth build and release then its only needed for build action)"
|
echo " -r, --release Builds cmake in release mode"
|
||||||
|
echo " -t CMAKE_TARGET, --target CMAKE_TARGET"
|
||||||
|
echo " Builds specific target. Builds all targets specified in order that they are specified in. Clean action is not recomended when using multiple targets."
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
fi
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -z "$2" ]
|
if [[ -z "$1" ]]; then
|
||||||
then
|
echo "no actions provided"
|
||||||
BUILD_TYPE=$DEFAULT_BUILD_TYPE
|
|
||||||
else
|
|
||||||
BT=$(echo $2 | tr '[:upper:]' '[:lower:]')
|
|
||||||
if [[ $BT == "d" || $BT == "debug" ]]; then
|
|
||||||
BUILD_TYPE="d"
|
|
||||||
elif [[ $BT == "r" || $BT == "release" ]]; then
|
|
||||||
BUILD_TYPE="r"
|
|
||||||
else
|
|
||||||
echo "unknown build type $2"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if (( $#debug > 0 )); then
|
||||||
|
BUILD_TYPE="debug"
|
||||||
|
elif (( $#release > 0 )); then
|
||||||
|
BUILD_TYPE="release"
|
||||||
|
else
|
||||||
|
BUILD_TYPE=$DEFAULT_BUILD_TYPE
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if (( $#target != 0 )); then
|
||||||
|
TARGETS=$#target
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo() {
|
echo() {
|
||||||
command echo -e "${COLOR}$@${NC}"
|
command echo -e "${COLOR}$@${NC}"
|
||||||
}
|
}
|
||||||
|
|
||||||
ARG=$1
|
ARG=$1
|
||||||
if [[ $BUILD_TYPE == "d" ]]; then
|
|
||||||
BUILD_FOLDER=$BUILD_DEBUG_FOLDER
|
BF="$BUILD_FOLDER/$BUILD_TYPE"
|
||||||
else
|
|
||||||
BUILD_FOLDER=$BUILD_RELEASE_FOLDER
|
for TARGET in $TARGETS; do
|
||||||
fi
|
|
||||||
for (( i=0; i<${#ARG}; i++ )); do
|
for (( i=0; i<${#ARG}; i++ )); do
|
||||||
case ${ARG:$i:1} in
|
case ${ARG:$i:1} in
|
||||||
"c")
|
"c")
|
||||||
echo "cleaning project"
|
echo "cleaning project"
|
||||||
rm -rf $BUILD_FOLDER
|
rm -rf $BUILD_FOLDER
|
||||||
;;
|
;;
|
||||||
|
"g" | "b")
|
||||||
|
mkdir -p $BF
|
||||||
|
;;
|
||||||
"g")
|
"g")
|
||||||
echo "generating cmake files"
|
echo "generating cmake files"
|
||||||
mkdir -p $BUILD_FOLDER
|
CMAKE_BUILD_TYPE=${BUILD_TYPE^}
|
||||||
if [[ $BUILD_TYPE == "d" ]]; then
|
cmake -S . -B $BF -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE
|
||||||
cmake -S . -B $BUILD_DEBUG_FOLDER -DCMAKE_BUILD_TYPE=Debug
|
|
||||||
else
|
|
||||||
cmake -S . -B $BUILD_RELEASE_FOLDER -DCMAKE_BUILD_TYPE=Release
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
"b")
|
"b")
|
||||||
echo "building project"
|
echo "building project"
|
||||||
cmake --build $BUILD_FOLDER
|
cmake --build $BF
|
||||||
;;
|
;;
|
||||||
"r")
|
"r")
|
||||||
echo "running project"
|
echo "running project"
|
||||||
./$BUILD_FOLDER/$DEFAULT_TARGET
|
if [[ -f "$BF/$TARGET" ]]; then
|
||||||
|
./$BF/$TARGET
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
"s")
|
"s")
|
||||||
echo "stripping executable"
|
echo "stripping executable"
|
||||||
strip -s $BUILD_FOLDER/$DEFAULT_TARGET -o "$BUILD_FOLDER/$DEFAULT_TARGET-stripped"
|
strip -s $BF/$TARGET -o "$BF/$TARGET-stripped"
|
||||||
;;
|
;;
|
||||||
"d")
|
"d")
|
||||||
echo "debug project"
|
echo "debug project"
|
||||||
if [[ $BUILD_TYPE == "r" ]]; then
|
if [[ $BUILD_TYPE == "release" ]]; then
|
||||||
echo "WARNING: debugging release build"
|
echo "WARNING: debugging release build"
|
||||||
fi
|
fi
|
||||||
gdb ./$BUILD_FOLDER/$DEFAULT_TARGET
|
gdb $BF/$TARGET
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "unknown action ${1:$i:1}"
|
echo "unknown action ${1:$i:1}"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
done
|
||||||
|
|
Loading…
Reference in a new issue