[ ! -z "${BASHRC_CXX+x}" ] && return || readonly BASHRC_CXX=1 C_FLAGS=('-Wall' '-Wextra') runc() ( set -o errexit local -a c_flags=("${C_FLAGS[@]}") local -a src_files=() local -a prog_flags=() while [ "$#" -gt 0 ]; do case "$1" in --c-flags) if [ "$#" -le 1 ]; then echo "$FUNCNAME: missing argument for parameter: $1" >&2 return 1 fi shift ; c_flags+=("$1") ; shift ;; -h) echo "usage: $FUNCNAME [-h] [--c-flags FLAG]" return 0 ;; --) shift ; break ;; *) src_files+=("$( realpath "$1" )") ; shift ;; esac done prog_flags=("$@") local build_dir="$( mktemp --directory )" trap "$( printf 'popd > /dev/null && rm -rf %q' "$build_dir" )" 0 pushd "$build_dir" > /dev/null local output_name="$( mktemp --tmpdir=. "${FUNCNAME}XXX.exe" )" gcc -o "$output_name" \ "${c_flags[@]+"${c_flags[@]}"}" \ "${src_files[@]+"${src_files[@]}"}" "$output_name" "${prog_flags[@]+"${prog_flags[@]}"}" ) CXX_FLAGS=('-Wall' '-Wextra' '-std=c++14') runcxx() ( set -o errexit local cxx_flags=("${CXX_FLAGS[@]}") local -a src_files=() local -a prog_flags=() while [ "$#" -gt 0 ]; do case "$1" in --cxx-flags) if [ "$#" -le 1 ]; then echo "$FUNCNAME: missing argument for parameter: $1" >&2 return 1 fi shift ; cxx_flags+=("$1") ; shift ;; -h) echo "usage: $FUNCNAME [-h] [--cxx-flags FLAG]" return 0 ;; --) shift ; break ;; *) src_files+=("$( realpath "$1" )") ; shift ;; esac done prog_flags=("$@") local build_dir="$( mktemp --directory )" trap "$( printf 'popd > /dev/null && rm -rf %q' "$build_dir" )" 0 pushd "$build_dir" > /dev/null local output_name="$( mktemp --tmpdir=. "${FUNCNAME}XXX.exe" )" g++ -o "$output_name" \ "${cxx_flags[@]+"${cxx_flags[@]}"}" \ "${src_files[@]+"${src_files[@]}"}" "$output_name" "${prog_flags[@]+"${prog_flags[@]}"}" )