請參閱Call functions in other files in C++ and OpenCV初始問題。我正在使用的代碼詳細給出。這是一個子問題。BASH腳本來編譯多個C++文件 - OpenCV
我有一個bash腳本:
echo "compiling $1"
if [[ $1 == *.c ]]
then
gcc -ggdb `pkg-config --cflags opencv` -o `basename $1 .c` $1 `pkg-config --libs opencv`;
elif [[ $1 == *.cpp ]]
then
g++ -ggdb `pkg-config --cflags opencv` -o `basename $1 .cpp` $1 `pkg-config --libs opencv`;
else
echo "Please compile only .c or .cpp files"
fi
echo "Output file => ${1%.*}"
上面BASH腳本用於使用./script.sh input.cpp
編譯OpenCV的代碼。
我懷疑是我怎麼能修改在同一時間編譯多個文件,像我用我的主代碼像一些功能的另一個文件:
./script.sh input.cpp functions.cpp
編輯
作爲由約翰·B建議,我修改了我的bash腳本來
for f in "[email protected]"; do
echo "compiling $f"
if [[ $f == *.c ]]
then
gcc -ggdb `pkg-config --cflags opencv` -o `basename "$f" .c` "$f" `pkg-config --libs opencv`
elif [[ $f == *.cpp ]]
then
g++ -ggdb `pkg-config --cflags opencv` -o `basename "$f" .cpp` "$f" `pkg-config --libs opencv`
else
echo "$f is not .c or .cpp file"
fi
echo "Output file => ${f%.*}"
done
但現在,我得到以下錯誤:
compiling draw_shapes.cpp
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Output file => draw_shapes
compiling test.cpp
/tmp/ccW65wuP.o: In function `main':
/home/kanishka/Desktop/opencv test/test.cpp:31: undefined reference to `draw_line(cv::Mat, cv::Point_<int>, cv::Point_<int>, int, int, int)'
collect2: error: ld returned 1 exit status
Output file => test
相關:http://stackoverflow.com/questions/24442836/call -functions功能於其他 - 文件 - 在-C-和OpenCV的 –
+1的鏈接。謝謝@Ben! –
正常最好的做法是使用一個'makefile',或更現代的等同物中的一個。 「make」是爲了避免這種shell腳本在很多情況下被髮明出來的。 –