2011-11-29 11 views
29

मैं सिर्फ पाने के लिए पहले काम कर बातें करने के लिए अपने ही परियोजना की तरह लग रही एक परीक्षण परियोजना की स्थापना करने की कोशिश कर रहा हूँ और यह इस तरह दिखता है:CMake शामिल हैं और स्रोत पथ - बुनियादी सेटअप

/MainProject/inc/main.h 
/MainProject/src/main.cpp 
/LibProject/inc/test.h 
/LibProject/src/test.cpp 

मैंने पाया कुछ ट्यूटोरियल, लेकिन जब मैं inc और src फ़ोल्डर है तो इसे स्थापित करने का तरीका नहीं पता? CMakeLists.txt फ़ाइलों को कैसे देखेंगे? क्या मेरे पास प्रत्येक प्रोजेक्ट फ़ोल्डर्स में से एक/एक होगा? ऐसा लगता है कि मुझे inc और src फ़ोल्डरों में से एक की आवश्यकता नहीं है?

उत्तर

59

आपको प्रत्येक स्रोत उपनिर्देशिका के लिए CMakeLists.txt की आवश्यकता है।

root 
|-MainProject 
| |-inc 
| | '-main.h 
| |-src 
| | |-main.cpp 
| | '-CMakeLists.txt 
| '-CMakeLists.txt 
|-LibProject 
| |-inc 
| | '-test.h 
| |-src 
| | |-test.cpp 
| | '-CMakeLists.txt 
| '-CMakeLists.txt 
'-CMakeLists.txt 

root/CMakeLists.txt की सामग्री::

project(MyProject) 
subdirs(MainProject LibProject) 

LibProject/CMakeLists.txt की सामग्री और MainProject/CMakeLists.txt:

subdirs(src) 

LibProject/src/CMakeLists.txt की सामग्री:

# Notice name prefix of this variable, set by CMake according 
# to value given with "project()" in the root CMakeLists.txt. 
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc) 
add_library(LibProject test.cpp) 
आपका संरचना कुछ इस तरह दिखना चाहिए

MainProject/src/CMakeLists.txt की सामग्री:

include_directories(${MyProject_SOURCE_DIR}/MainProject/inc) 
# I assume you want to use LibProject as a library in MainProject. 
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc) 
link_directories(${MyProject_SOURCE_DIR}/LibProject/src) 
add_executable(MainProject main.cpp) 
target_link_libraries(MainProject LibProject) 

तो कॉन्फ़िगर और साथ निर्माण:

$ cd root 
$ mkdir build 
$ cd build 
$ cmake .. 
$ make 
+8

बिंदु आपके उत्तर की प्रतिलिपि बनाने के बजाय नहीं बल्कि इसे पूरा करने के लिए था। जहां तक ​​मुझे पता है कि यह दो गायब 'CMakeLists.txt' और गायब 'link_directories()' कमांड के बिना काम नहीं करेगा। मैं आपके जवाब पर टिप्पणी करने का इरादा रखता हूं, लेकिन मेरी प्रतिष्ठा ऐसा करने के लिए बहुत कम है। तो मुझे लगता है कि दूसरा जवाब पोस्ट करना सबसे आत्मनिर्भर तरीका होगा। आपको अपमानित करने का मतलब नहीं था। –

+0

इसे लिंक_डायरेक्टरी के बिना काम करना चाहिए क्योंकि यह उसी प्रोजेक्ट द्वारा बनाई गई लाइब्रेरी है। पथ की समस्या के लिए आप सही हैं, मैं इसे सही कर दूंगा। – Beginner

+0

आह ठीक है .. धन्यवाद – bitgregor

18

आप इसे निम्नलिखित की तरह कर सकते हैं।

  • अपने MainProject निर्देशिका में

    CMakeLists.txt:

    project(MainProject) 
    
    add_subdirectory(LibProject/src) 
    add_subdirectory(MainProject/src) 
    
  • अपने LibProject/src निर्देशिका में

    CMakeLists.txt:

    include_directories(${PROJECT_SRC_DIR}/LibProject/inc/) 
    add_library(LibProject test.cpp) 
    
  • अपने MainProject में

    CMakeLists.txt/src निर्देशिका :

    include_directories(${PROJECT_SRC_DIR}/MainProject/inc/) 
    add_executable(MainProject main.cpp) 
    target_link_libraries(MainProject LibProject) 
    
+3

मैं पूछ सकता हूँ तुम क्यों की क्या ज़रूरत है '$ {PROJECT_SRC_DIR}'? मुझे एक सीएमके त्रुटि मिली और निम्नानुसार वैरिएबल को सही करना था: दस्तावेज के अनुसार – nakajuice

+1

इसे बनाने के लिए '$ {PROJECT_SOURCE_DIR} ', यह PROJECT_SOURCE_DIR होना चाहिए। आप यहां विवरण प्राप्त कर सकते हैं: https://cmake.org/Wiki/CMake_Useful_Variables – wasabi

संबंधित मुद्दे