2012-12-20 178 views
20

我認爲這是創建使用OpenCV庫的項目的基本步驟,因此您不需要手動包含所有庫。沒有關於這個主題的詳細信息,至少對於剛剛想要使用OpenCV的新手來說,那麼:使用Cmake配置C++ OpenCV項目

哪個是最簡單和可擴展的方式來創建Cmake多平臺C++ OpenCV?

回答

27

第一:創建一個文件夾項目包含兩個子文件夾SRC包括,和一個叫的CMakeLists.txt文件。

第二個:把你的cpp放入src文件夾和你的頭文件夾在include文件夾中。

三:你的CMakeLists.txt應該是這樣的:

cmake_minimum_required(VERSION 2.8) 
PROJECT (name) 
find_package(OpenCV REQUIRED) 
set(NAME_SRC 
    src/main.cpp  
) 

set(NAME_HEADERS  
    include/header.h 
) 

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) 
link_directories(${CMAKE_BINARY_DIR}/bin) 
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) 
add_executable(name ${NAME_SRC} ${NAME_HEADERS}) 

target_link_libraries(sample_pcTest ${OpenCV_LIBS}) 

四:打開CMake的GUI,選擇根文件夾作爲輸入,併爲輸出build文件夾。點擊配置,然後生成,並選擇生成器(VisualStudio,Eclipse,...)

+3

請不要推薦使用「link_directories」 - 而是將完整路徑名作爲參數提供給target_link_libraries。 link_directories文檔(http://cmake.org/cmake/help/v2.8.10/cmake.html#command:link_directories)說:「請注意,這個命令很少需要。」 – DLRdave

+1

你可以省略NAME_HEADERS - CMake掃描源文件來確定頭文件的依賴關係。 –

+0

@DLRdave在Windows中,您需要'link_directories($ {OpenCV_LIB_DIR})',因爲$ {OpenCV_LIBS}中返回的值僅包含庫名稱(不是完整路徑)。如果你想讓'$ {OpenCV_LIBS}'實際包含庫路徑,那麼你需要'find_package(OpenCV REQUIRED core imgproc ...)'。靜態構建意味着在'find_package'調用中添加每個opencv模塊。 –

2

我使用的是opencv3.0和cmake3.8, 配置下面的工作適合我!

######## A simple cmakelists.txt file for OpenCV() ############# 
cmake_minimum_required(VERSION 2.8)       # 初始化Cmake版本檢測 
PROJECT(word)          # 工程名 

FIND_PACKAGE(OpenCV REQUIRED)        # 環境變量中尋找OpenCV的庫的位置 
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}) 

ADD_EXECUTABLE(word main.c)       # 將文件加入工程,有多少.c或者cpp都加進去 
TARGET_LINK_LIBRARIES (word ${OpenCV_LIBS})   # 這兩行的次序也不能變!加入動態鏈接庫 
########### end #################################### 
+0

的Dll對於CMake> = 2.8.11來說不需要調用這是唯一正確的方法。自我接受的答案至少可以說是完全誤導性的。 – Slava