CMake

2012-12-20 19 views
20

के साथ एक C++ OpenCV परियोजना का विन्यास मैं इस परियोजनाओं कि OpenCV पुस्तकालयों का उपयोग बनाने के लिए एक बुनियादी कदम पर विचार करें ताकि आप मैन्युअल रूप से सभी पुस्तकालयों को शामिल करने की जरूरत नहीं है। कम से कम एक नौसिखिया के लिए इस विषय पर विस्तृत जानकारी नहीं है, जो कि जल्द ही ओपनसीवी का उपयोग करना चाहता है, इसलिए:CMake

सीएमके के साथ मल्टीप्लाफ्टर सी ++ ओपनसीवी बनाने का सबसे आसान और स्केलेबल तरीका कौन सा है?

उत्तर

27

पहले: एक फ़ोल्डर परियोजना दो सबफ़ोल्डर src और शामिल, और एक फ़ाइल CMakeLists.txt बुलाया युक्त पैदा करते हैं।

दूसरा: अपने सीपीपी को src फ़ोल्डर और अपने शीर्षकों के अंदर फ़ोल्डर में शामिल करें।

तीसरा: आपका 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 जीयूआई और इनपुट के रूप में रूट फ़ोल्डर का चयन करें और उत्पादन के लिए एक निर्माण फ़ोल्डर बना। कॉन्फ़िगर करें पर क्लिक करें, फिर जनरेटर (विजुअलस्टूडियो, ग्रहण, ...)

+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 विंडोज में आप 'link_directories ($ {OpenCV_LIB_DIR})' क्योंकि '$ {OpenCV_LIBS} में दिए गए मान' केवल पुस्तकालय के नाम शामिल नहीं है (पूर्ण पथ) की आवश्यकता होगी। यदि आप चाहते हैं '$ {OpenCV_LIBS}' वास्तव में पुस्तकालय पथ तो आप 'find_package (OpenCV जरुरी प्रमुख 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

के लिए विन्यस्त करने नहीं पाया। और आत्म-स्वीकृत उत्तर कम से कम कहने के लिए पूरी तरह से भ्रामक है। – Slava