http://blog.csdn.net/chenyusiyuan/article/details/8706177#comments
這裏給大家介紹一種在頭文件中自動判斷識別OpenCV的版本號,並據此添加對應的依賴庫(.lib文件)的方法。具體代碼如下:
#ifndef _PREDEP_H_
#define _PREDEP_H_
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include "opencv2/core/version.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#define CV_VERSION_ID CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)
#ifdef _DEBUG
#define cvLIB(name) "opencv_" name CV_VERSION_ID "d"
#else
#define cvLIB(name) "opencv_" name CV_VERSION_ID
#endif
#pragma comment( lib, cvLIB("core") )
#pragma comment( lib, cvLIB("imgproc") )
#pragma comment( lib, cvLIB("highgui") )
#pragma comment( lib, cvLIB("flann") )
#pragma comment( lib, cvLIB("features2d") )
#pragma comment( lib, cvLIB("calib3d") )
#endif
這裏首先是通過OpenCV的version.hpp文件獲取版本號,然後將CV_MAJOR_VERSION、CV_MINOR_VERSION、CV_SUBMINOR_VERSION三個版本號數字串接成一個字符串CV_VERSION_ID。然後,根據OpenCV的lib文件的命名規則和當前的編譯環境(debug或release)來定義一個命名lib文件的宏 cvLIB。最後,通過#pragma comment ( lib, * ) 指令來添加所需的依賴庫。
上面這種方法的便捷性在於,我們只需要指定依賴庫的名稱,通過所定義的宏就可以自動生成和添加與你所安裝的OpenCV版本相對應的依賴庫;並且將來升級OpenCV時,除非新版本的依賴庫命名規則發生改變,否則就不需要再改動代碼,程序會自動判斷OpenCV的版本並找到對應的依賴庫。
這種方法是參考自 wxWidgets 的,更多的技巧可以參見 wxWidgets\include\msvc\wx\setup.h 和 wxWidgets\include\wx\version.h 。
P.S.:另外,建議在系統環境變量中設置一個專門的項來存儲OpenCV的安裝路徑,比如命名爲 OPENCVDIR,然後在Visual Studio的項目屬性VC++目錄中設置include目錄和library目錄爲 $(OPENCVDIR)/include和$(OPENCVDIR)/lib。這樣以後升級OpenCV時,只需在系統環境變量中修改OPENCVDIR的路徑,就不需要修改項目代碼和編譯器設置了。