-
Notifications
You must be signed in to change notification settings - Fork 0
/
build_cpp.sh
76 lines (71 loc) · 2.03 KB
/
build_cpp.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env bash
#
# Simple CMake wrapper script to build the CMake targets in the project.
# Any arguments before --build-args are passed directly to cmake --build.
# arguments passed to cmake command directly
CMAKE_ARGS=()
# arguments passed to cmake --build command directly
CMAKE_BUILD_ARGS=()
# indicate current argument parsing mode
PARSE_MODE=cmake_args
##
# Collect incoming arguments, separating them for cmake, cmake --build.
#
# Sets the CMAKE_ARGS and CMAKE_BUILD_ARGS global variables.
#
# Arguments:
# Array of command-line arguments
# Any arguments after --build-args are passed to cmake --build while the
# rest preceding will be passed to the cmake configure command.
#
collect_args() {
for ARG in "$@"
do
# break early if -h or --help flag is introduced
if [ "$ARG" = -h ] || [ "$ARG" = --help ]
then
PARSE_MODE=print_help
return 0
elif [ "$ARG" = --build-args ]
then
PARSE_MODE=cmake_build_args
elif [ $PARSE_MODE = cmake_build_args ]
then
CMAKE_BUILD_ARGS+=("$ARG")
else
CMAKE_ARGS+=("$ARG")
fi
done
}
##
# Print help output for this script.
#
print_help() {
echo "Usage: $0 [ARG ...] [--build-args ARG [ARG ...]]"
echo
echo "Build the C++ library and examples by using CMake."
echo
echo "Arguments:"
echo " ARG ... args passed to cmake command"
echo " --build-args ARG [ARG ...] args passed to cmake --build command"
echo " -h,--help show this help message and exit"
echo
}
##
# Main function for the build script.
#
main() {
# separate incoming args into those for cmake, cmake --build
collect_args "$@"
# print help and exit if PARSE_MODE is print_help
if [ $PARSE_MODE = print_help ]
then
print_help
return 0
fi
cmake -S . -B build ${CMAKE_ARGS[@]}
# the last -j specification will override
cmake --build build -j ${CMAKE_BUILD_ARGS[@]}
}
set -e
main "$@"