จากการตามไปดู build_all.sh
พบว่า มันใช้ pkg-config ด้วยความสงสัยว่า มันเป็นอะไรยังไง เลยลองรันดู
$ pkg-config opencv --cflags
-I/home/dsin/opencv/include/opencv
$ pkg-config opencv --libs
-L/home/dsin/opencv/lib -lcxcore -lcv -lhighgui -lcvaux -lml
$ pkg-config opencv --cflags --libsว้าว เจ๋งแหะ
-I/home/dsin/opencv/include/opencv -L/home/dsin/opencv/lib -lcxcore -lcv -lhighgui -lcvaux -lml
ถ้าเป็นอย่างนี้ เราสามารถ
- ลง library ไว้ในที่ต่างกัน ในคนละเครื่องได้
- ย้าย library ไปยังที่อื่นๆ ได้
- โดยไม่ต้องเปลี่ยนตัวแปร เยอะแยะ ใน Makefile
แค่เปลี่ยน PKG_CONFIG_PATH ซึ่งเป็นตัวแปรที่เป็นอิสระจาก svn ได้
วิธีทำ คือ
1. export PKG_CONFIG_PATH=${HOME}/opencv/lib/pkgconfig
2. ซึ่งในโฟลเดอร์ ${HOME}/opencv/lib/pkgconfig มีไฟล์ opencv.pc อยู่ ซึ่งวิธีเขียน เป็นตามนี้
# Package Information for pkg-config
prefix=/home/dsin/opencv
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv
Name: OpenCV
Description: Intel(R) Open Source Computer Vision Library
Version: 1.1.0
Libs: -L${libdir} -lcxcore -lcv -lhighgui -lcvaux -lml
Cflags: -I${includedir}
3. แค่นี้เราก็สามารถใช้คำสั่ง pkg-config opencv --cflags --libs ซึ่งมันจะให้ผล ตามข้างบนได้เลย
ซึ่ง opencv ในคำสั่งนี้ คือ opencv.pc นั่นเอง
ซึ่งเราระลึกชาติได้ว่า จากการ ลง gsl ใน SIFT C++ library คราวก่อน
มันแอบไปเขียน config ไว้ที่
/usr/lib/pkgconfig/gsl.pc
จึงเรียก pkg-config --cflags gsl ได้นั่นเอง
ความคิดเห็น