2015-05-14 8 views
20

मैं वर्तमान में JetBrains CLion IDE का उपयोग कर सी में कुछ परियोजना यूलर चुनौतियों का सामना कर रहा हूं। जब मैंने पाइथन और जावा (क्रमशः पायचर्म और इंटेलिजे में) में इसे पूरा किया, तो मैं हमेशा "प्रोजेक्टउलर" नामक एक एकल प्रोजेक्ट बनाने में सक्षम था और किसी भी स्रोत फाइल को जोड़ता हूं जिसे मैं स्वतंत्र रूप से निष्पादित कर सकता हूं। हालांकि, ऐसा लगता है कि सीएलओएन में भी संभव नहीं है। किसी समस्या को हल करने के लिए उपयोग की जाने वाली प्रत्येक स्रोत फ़ाइलों में एक मुख्य() फ़ंक्शन होता है, और सीएमके हर बार संकलित करने का प्रयास करता है ("मुख्य 'की कई परिभाषा")।क्या प्रोजेक्ट में स्रोत फ़ाइलों को स्वतंत्र रूप से संकलित करने के लिए CLION को कॉन्फ़िगर करना संभव है?

क्या सीएलओएन को कॉन्फ़िगर करने और एक परियोजना में एक एकल स्रोत फ़ाइल निष्पादित करने के लिए एक समय में मेरे CMakeLists.txt को फिर से लिखने के बिना या हर समस्या के लिए एक नई परियोजना बनाने के लिए कॉन्फ़िगर करने का कोई तरीका है?

मुझे पता है कि सी संकलित और जावा या पायथन की तरह व्याख्या नहीं की गई है, लेकिन मैं कल्पना कर सकता हूं कि मैन्युअल रूप से प्रत्येक एकल स्रोत फ़ाइल को संकलित करें। क्या ऐसा करने के लिए CLION को कॉन्फ़िगर करने का कोई तरीका है? यदि हां, तो कैसे?

उत्तर

26

आप प्रत्येक समस्या के लिए CMakeLists.txt में एकाधिक निष्पादन योग्य परिभाषित कर सकते हैं।

add_executable(projecteuler ${SOURCE_FILES}) 

के बजाय

आप

add_executable(problem1 problem1.c) 
add_executable(problem2 problem2.c) 

निर्धारित कर सकते हैं तो फिर आप प्रत्येक निष्पादन योग्य (problem1, problem2 आदि) एक रन विन्यास, जो आप स्वतंत्र रूप से चला सकते हैं के लिए मिलता है। इस मामले में आपको हर बार फिर से लिखना नहीं होगा, इसके बजाय आप नई स्रोत फ़ाइल को नए निष्पादन योग्य में जोड़ दें।

+0

CLion को स्वचालित रूप से स्रोत जोड़ने का कोई तरीका नहीं है? मुझे पता है कि इसे जोड़ने के लिए बहुत कुछ नहीं है लेकिन यह बेहतर हो सकता है – InvisibleUn1corn

+0

यदि आप कोई नया सी ++ स्रोत या हेडर फ़ाइल जोड़ते हैं तो आप "लक्ष्य में जोड़ें" देख सकते हैं और फिर लक्ष्य/एक्जिक्यूटिव का चयन कर सकते हैं जहां आप सीएमकेलिस्ट में फ़ाइल जोड़ना चाहते हैं। टेक्स्ट। लेकिन लक्ष्य पहले से ही CMakeLists.txt फ़ाइल में होना चाहिए। – ipa

+1

@ InvisibleUn1corn मैं मानता हूं कि यह अच्छा है अगर हम 'add_executable' को अधिक आसानी से जोड़ सकते हैं। इस उद्देश्य के लिए, मैंने CLion "[सी/सी ++ एकल फ़ाइल निष्पादन प्लगइन] के लिए एक प्लगइन बनाया है (http://corochann.com/projects/single-file-execution-plugin)"। – corochann

3

आप प्रत्येक निर्देशिका में तो

cmake_minimum_required(VERSION 2.8.4) 

add_subdirectory(src/prj1) 
add_subdirectory(src/prj2) 

उपयोग कर सकते हैं इस तरह एक अन्य CMakeLists.txt बनाएँ:

cmake_minimum_required(VERSION 2.8.4) 
project(prj1) 

set(EXEC_NAME prj1) 

set(SOURCE_FILES 
    main_prj1.cpp 
    x.cpp 
    y.cpp 
) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(EXECUTABLE_OUTPUT_PATH ../../dist/${CMAKE_BUILD_TYPE}) 

add_executable(${EXEC_NAME} ${SOURCE_FILES}) 

आप file(GLOB SOURCE_FILES *.cpp) उपयोग कर सकते हैं आप अपने आप आपके संकलन में फ़ाइलों को जोड़ना चाहते हैं। लेकिन ध्यान रखें कि यह "चाल" दृढ़ता से प्रोत्साहित नहीं है।

यह स्वचालित रूप से CLION में बिल्ड कॉन्फ़िगरेशन भी जोड़ देगा।

0

आप इन लाइनों को अपने CMakeLists.txt पर जोड़ सकते हैं।

#GLOB_RECURSE will find files in all subdirectories that match the globbing expressions and store it into the variable. 
    file(GLOB_RECURSE APP_SOURCES *.c) 
    foreach (testsourcefile ${APP_SOURCES}) 
     #get filename without extension 
     get_filename_component(testname ${testsourcefile} NAME_WE) 
     #add executable for all file 
     add_executable(${testname} ${testsourcefile}) 
    endforeach (testsourcefile ${APP_SOURCES}) 

आप cmake परियोजना को फिर से लोड करना होगा (उपकरण -> CMake) हर बार जब आप अपनी परियोजना से फाइल को जोड़ने या हटाने। यदि आप अधिक संख्या में फाइलें जोड़ते हैं तो समय भी बढ़ाना होगा। वैकल्पिक आप अधिक निर्देशिकाएं और उपनिर्देशिकाएं बना सकते हैं और file(GLOB_RECURSE APP_SOURCES path/to/*.c) का उपयोग कर सकते हैं, इसलिए यह केवल उन फ़ाइलों का निर्माण करेगा।

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

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