-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
executable file
·63 lines (53 loc) · 1.5 KB
/
build.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
# alternative option if not using CMake
# mkdir build && cd build && cmake .. && cd ..
# cmake --build build/ --config Release
# echo $1
BASE_DIR=$PWD
ARGS=()
CMAKE_FILE=CMakeLists.txt
# # remove extension
while [ "$#" -gt 0 ]; do
INPUT=${1%%.*}
ARGS+=("add_example($INPUT)")
shift
done
PROJECT=`basename $BASE_DIR`
# # build
# echo 'g++ -std=c++0x `pkg-config --cflags opencv` '$INPUT' `pkg-config --libs opencv` -o '$OUTPUT
# g++ -std=c++0x `pkg-config --cflags opencv` $INPUT `pkg-config --libs opencv` -o $OUTPUT
saveMakeLists(){
local str=$(cat <<EOF
cmake_minimum_required(VERSION 3.1)
# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY \${CMAKE_BINARY_DIR}/..)
SET(OpenCV_DIR /usr/local/lib/cmake/opencv4)
PROJECT($PROJECT)
find_package( OpenCV REQUIRED )
include_directories( \${OpenCV_INCLUDE_DIRS})
MACRO(add_example name)
ADD_EXECUTABLE(\${name} \${name}.cpp)
TARGET_LINK_LIBRARIES(\${name} \${OpenCV_LIBS})
ENDMACRO()
$1
EOF
)
echo -e "$str" > $CMAKE_FILE
}
if [ -d build ] && [ -f CMakeLists.txt ];then
# check if not exsisted then append
for ARG in "${ARGS[@]}";do
if ! grep -q $ARG "$CMAKE_FILE"; then
echo "Add target $ARG"
echo "$ARG" >> $CMAKE_FILE
fi
done
else
echo "Create $CMAKE_FILE and build ..."
OUTPUT=$(IFS=$'\n'; echo "${ARGS[*]}")
saveMakeLists "$OUTPUT"
mkdir -p build && cd build && cmake .. && cd ..
fi
echo "Building ..."
cmake --build build/ --config Release