Qt 5.11 - CMake Manual

सीएमके मैनुअल




qt

सीएमके मैनुअल

CMake एक उपकरण है जो विभिन्न प्लेटफार्मों पर विकास परियोजनाओं के लिए निर्माण प्रक्रिया को सरल बनाने में मदद करता है। CMake , बिल्डसिस्टम की पीढ़ी जैसे कि मेकफाइल्स और विजुअल स्टूडियो प्रोजेक्ट फाइलों को स्वचालित करता है।

CMake अपने स्वयं के documentation साथ एक 3 पार्टी उपकरण है। इस मैनुअल के बाकी विवरण CMake साथ क्यूटी 5 का उपयोग करने के तरीके के बारे में CMake । Qt5 का उपयोग करने के लिए आवश्यक न्यूनतम संस्करण CMake 3.1.0 है।

शुरू करना

find_package का उपयोग करते समय पहली आवश्यकता क्यूटी के साथ भेजे गए पुस्तकालयों और हेडर फ़ाइलों का पता लगाने के लिए find_package का उपयोग करना है। इन पुस्तकालयों और हेडर फ़ाइलों का उपयोग Qt के आधार पर पुस्तकालयों और अनुप्रयोगों के निर्माण के लिए किया जा सकता है।

CMake साथ क्यूटी पुस्तकालयों और हेडर का उपयोग करने का अनुशंसित तरीका target_link_libraries कमांड का उपयोग करना target_link_libraries । यह आदेश स्वचालित रूप से उपयुक्त निर्देशिकाओं को शामिल करता है, परिभाषाओं को संकलित करता है, स्थिति-स्वतंत्र-कोड ध्वज, और विंडोज़ पर qtmain.lib लाइब्रेरी से लिंक करता है।

एक नरकगृह जीयूआई निष्पादन योग्य बनाने के लिए, विशिष्ट उपयोग होगा:

cmake_minimum_required(VERSION 3.1.0)

project(testproject)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed
set(CMAKE_AUTOMOC ON)
# Create code from a list of Qt designer ui files
set(CMAKE_AUTOUIC ON)

# Find the QtWidgets library
find_package(Qt5Widgets CONFIG REQUIRED)

# Populate a CMake variable with the sources
set(helloworld_SRCS
    mainwindow.ui
    mainwindow.cpp
    main.cpp
)
# Tell CMake to create the helloworld executable
add_executable(helloworld WIN32 ${helloworld_SRCS})
# Use the Widgets module from Qt 5
target_link_libraries(helloworld Qt5::Widgets)

find_package के सफल होने के लिए, Qt 5 को CMAKE_PREFIX_PATH से नीचे पाया जाना चाहिए, या Qt5 <मॉड्यूल> _DIR को CMake कैश में Qt5WidgetsConfig.cmake फ़ाइल के स्थान पर सेट करना होगा। CMake का उपयोग करने का सबसे आसान तरीका Qt 5 के प्रीफिक्स को स्थापित करने के लिए CMAKE_PREFIX_PATH पर्यावरण चर सेट करना है।

आवश्यकता होने पर CMAKE_AUTOMOC सेटिंग स्वतः चलती है। इस सुविधा पर अधिक जानकारी के लिए CMake AUTOMOC प्रलेखन देखें

आयातित लक्ष्य

प्रत्येक Qt मॉड्यूल के लिए आयातित लक्ष्य बनाए गए हैं। आयात किए गए लक्ष्य नामों को Qt5 <मॉड्यूल> _LIBRARIES जैसे CMake कमांड जैसे _LIBRARIES में उपयोग करने के बजाय प्राथमिकता दी जानी चाहिए। पुस्तकालय का वास्तविक रास्ता LOCATION संपत्ति का उपयोग करके प्राप्त किया जा सकता है :

find_package(Qt5Core)

get_target_property(QtCore_location Qt5::Core LOCATION)

ध्यान दें कि CMake कोड में पुस्तकालय के लिए पूर्ण स्थान की आवश्यकता होना दुर्लभ है। अधिकांश CMake एपीआई आयातित लक्ष्यों के बारे में जानते हैं और पूर्ण पथ के बजाय स्वचालित रूप से उनका उपयोग कर सकते हैं।

क्यूटी 5 में प्रत्येक मॉड्यूल का नामकरण सम्मेलन के साथ एक पुस्तकालय लक्ष्य है Qt5 :: <मॉड्यूल> जिसका उपयोग इस उद्देश्य के लिए किया जा सकता है।

आयातित लक्ष्य विन्यास के साथ बनाए जाते हैं क्यूटी के साथ कॉन्फ़िगर किया गया था। यही है, अगर Q -debug स्विच के साथ कॉन्फ़िगर किया गया था, तो कॉन्फ़िगरेशन DEBUG के साथ एक आयातित लक्ष्य बनाया जाएगा। यदि Qt -release के साथ कॉन्फ़िगर किया गया था, तो विन्यास के साथ एक आयातित लक्ष्य स्विच करें RELEASE बनाया जाएगा। यदि Qt को -debug-and-release स्विच (विंडोज़ पर डिफ़ॉल्ट) के साथ कॉन्फ़िगर किया गया था, तो आयातित लक्ष्य RELEASE और DEBUG कॉन्फ़िगरेशन दोनों के साथ बनाए जाएंगे।

यदि आपके प्रोजेक्ट में कस्टम CMake बिल्ड कॉन्फ़िगरेशन है, तो आपके कस्टम कॉन्फ़िगरेशन से मैपिंग को डीबग करना या Qt कॉन्फ़िगरेशन रिलीज़ करना आवश्यक हो सकता है।

find_package(Qt5Core)

set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")

# set up a mapping so that the Release configuration for the Qt imported target is
# used in the COVERAGE CMake configuration.
set_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")

प्लग इन सीएमके में महत्वपूर्ण लक्ष्यों के रूप में भी उपलब्ध हैं। क्यूटी नेटवर्क , क्यूटी एसक्यूएल , क्यूटी जीयूआई और क्यूटी विजेट मॉड्यूल में प्लगइन्स जुड़े हुए हैं। वे Qt5 <मॉड्यूल> _PLUGINS चर में प्लगइन्स की एक सूची प्रदान करते हैं।

foreach(plugin ${Qt5Network_PLUGINS})
  get_target_property(_loc ${plugin} LOCATION)
  message("Plugin ${plugin} is at location ${_loc}")
endforeach()

चर संदर्भ

मॉड्यूल चर

एक find_package कॉल का परिणाम यह है कि find_package साथ उपयोग के लिए आयातित लक्ष्य बनाए जाएंगे, कुछ चर आबादी को कॉन्फ़िगर करने के लिए आवश्यक जानकारी के साथ आबाद होंगे, और मैक्रोज़ उपयोग के लिए उपलब्ध कराए जाएंगे। प्रत्येक मॉड्यूल के लिए आयातित लक्ष्य का नाम 'Qt5 ::' के उपसर्ग के साथ मॉड्यूल के नाम से मेल खाता है, उदाहरण के लिए Qt5 :: विजेट। पैकेज-विशिष्ट चर के सभी पैकेज के नाम के उपसर्ग के साथ एक सुसंगत नाम है। उदाहरण के लिए, find_package (Qt5Widgets) निम्न चर उपलब्ध कराएगा यदि सफलतापूर्वक मिल जाए:

  • Qt5Widgets_VERSION मॉड्यूल के संस्करण का वर्णन स्ट्रिंग।
  • Qt5Widgets_LIBRARIES target_link_lbooks कमांड के साथ उपयोग के लिए पुस्तकालयों की सूची।
  • Qt5Widgets_INCLUDE_DIRS शामिल_देशीय आदेशों के साथ उपयोग के लिए निर्देशिकाओं की सूची।
  • Qt5Widgets_DEFINITIONS add_definitions के साथ उपयोग के लिए परिभाषाओं की सूची।
  • Qt5Widgets_COMPILE_DEFINITIONS COMPILE_DEFINITIONS लक्ष्य संपत्ति के साथ उपयोग के लिए परिभाषाओं की सूची।
  • Qt5Widgets_FUND बूलियन ने वर्णन किया कि क्या मॉड्यूल सफलतापूर्वक पाया गया था।
  • Qt5Widgets_EXECUTABLE_COMPILE_FLAGS फ़्लैगिंग का उपयोग करते समय उपयोग किए जाने वाले झंडे का स्ट्रिंग।

उन वेरिएबल्स के समतुल्य सभी पैकेजों के लिए उपलब्ध होंगे जो एक find_package कॉल के साथ find_package हैं। ध्यान दें कि चर केस-संवेदी हैं।

स्थापना चर

इसके अतिरिक्त, कई अन्य चर उपलब्ध हैं जो किसी विशेष पैकेज से संबंधित नहीं हैं, लेकिन स्वयं Qt स्थापना के लिए।

  • Qt_VISIBILITY_AVAILABLE बूलियन यह बताता है कि Qt को छिपी हुई दृश्यता के साथ बनाया गया था या नहीं।
  • QT_LIBINFIX स्ट्रिंग पुस्तकालय के नामों में उपयोग किया गया है।

मैक्रो संदर्भ

Qt5Core मैक्रोज़

Qt5Core मिलने पर मैक्रोज़ उपलब्ध हैं।

मैक्रो विवरण
qt5_wrap_cpp (आउटफिट इनपुटफाइल ... विकल्प ...) Q_OBJECT घोषणा के साथ Qt वर्ग युक्त फ़ाइलों की सूची से moc कोड बनाएं। प्रति-निर्देशिका प्रीप्रोसेसर परिभाषाएँ भी जोड़ी जाती हैं। विकल्प को moc को दिया जा सकता है, जैसे कि "moc -help" निष्पादित करते समय पाए गए।
qt5_add_resources (आउटफिट इनपुटफाइल ... विकल्प ...) Qt संसाधन फ़ाइलों की सूची से कोड बनाएँ। आरसीसी को विकल्प दिए जा सकते हैं, जैसे कि "आरसीसी -एचएलपी" निष्पादित करते समय पाए गए।
qt5_add_binary_resources (लक्ष्य इनपुट फ़ाइल ... विकल्प ... DESTINATION ...) Qt संसाधन फ़ाइलों की सूची से एक RCC फ़ाइल बनाएँ। आरसीसी को विकल्प दिए जा सकते हैं, जैसे कि "आरसीसी -एचएलपी" निष्पादित करते समय पाए गए। RCC फ़ाइल के लिए एक अलग फ़ाइल नाम या पथ का उपयोग करने के लिए एक गंतव्य दिया जा सकता है।
qt5_generate_moc (inputfile outputfile) शिशु को चलाने और आउटफिट बनाने के लिए एक नियम बनाता है। अगर किसी कारण से q5_WRAP_CPP () उचित नहीं है, तो इसका उपयोग करें, क्योंकि आपको moc फ़ाइल या कुछ समान के लिए कस्टम फ़ाइल नाम की आवश्यकता है।
qt5_use_modules (लक्ष्य [LINK_PUBLIC | LINK_PRIVATE] मॉड्यूल ...) इंगित करता है कि लक्ष्य Qt 5 मॉड्यूल का उपयोग करता है। लक्ष्य निर्दिष्ट मॉड्यूल से जुड़ा होगा, उन मॉड्यूल द्वारा स्थापित निर्देशिकाओं का उपयोग करें, उन मॉड्यूल द्वारा निर्धारित COMPILE_DEFINITIONS का उपयोग करें, और मॉड्यूल द्वारा निर्धारित COMPILE_FLAGS का उपयोग करें। LINK_PRIVATE या LINK_PUBLIC विनिर्देशक वैकल्पिक रूप से निर्दिष्ट किए जा सकते हैं। यदि LINK_PRIVATE निर्दिष्ट है तो मॉड्यूल को लक्ष्य के लिंक इंटरफ़ेस का हिस्सा नहीं बनाया गया है। अधिक जानकारी के लिए target_link_libraries लिए दस्तावेज़ देखें।

ध्यान दें कि यह मैक्रो केवल सीएमके 2.8.9 या बाद के संस्करण का उपयोग करने पर ही उपलब्ध है। यह मैक्रो अप्रचलित है। इसके बजाय लक्षित लक्ष्यों के साथ target_link_lbooks का उपयोग करें।

Qt5Widgets मैक्रोज़

Qt5Widgets मिलने पर मैक्रोज़ उपलब्ध हैं।

मैक्रो विवरण
qt5_wrap_ui (आउटफिट इनपुटफाइल ... विकल्प ...) क्यूटी डिजाइनर यूआई फ़ाइलों की सूची से कोड बनाएं। विकल्प यूआईसी को दिए जा सकते हैं, जैसे कि "यूआईसी -एचएलपी" निष्पादित करते समय पाए गए।

Qt5DBus मैक्रोज़

Qt5DBus मिलने पर मैक्रोज़ उपलब्ध हैं।

मैक्रो विवरण
qt5_add_dbus_interface (संगठन इंटरफ़ेस बेसन) दिए गए इंटरफ़ेस xml फ़ाइल से दिए गए बेसनेम के साथ इंटरफ़ेस हेडर और कार्यान्वयन फाइलें बनाएं और इसे स्रोतों की सूची में जोड़ें
qt5_add_dbus_interfaces (आउटफिट इनपुटफाइल ...) इंटरफ़ेस हेडर और कार्यान्वयन फ़ाइलों को सभी सूचीबद्ध इंटरफ़ेस xml फ़ाइलों के लिए बनाएँ, नाम xml फ़ाइल के नाम से स्वचालित रूप से निर्धारित किया जाएगा
qt5_add_dbus_adaptor (आउटफिट xmlfile पेरेंटहाइडर पेरेंटक्लासनाम [basename] [classname]) इंटरफ़ेस का वर्णन करने वाली xml फ़ाइल से एक dbus एडेप्टर (हेडर और कार्यान्वयन फ़ाइल) बनाएँ, और इसे स्रोतों की सूची में जोड़ें। एडॉप्टर एक पेरेंट क्लास को कॉल फॉरवर्ड करता है, जिसे पैरेंटहाइडर में परिभाषित किया गया है और पेरेंटक्लासनेम नाम दिया गया है। उत्पन्न फ़ाइलों का नाम <basename> adapter होगा। {cpp, h} जहाँ basename xml फ़ाइल के basename में चूक करता है। यदि <classname> प्रदान किया गया है, तो इसे एडॉप्टर के classname के रूप में उपयोग किया जाएगा।
qt5_generate_dbus_interface (हेडर [इंटरफेनेम] विकल्प ...) दिए गए हेडर से xml इंटरफ़ेस फ़ाइल जनरेट करें। यदि वैकल्पिक तर्क इंटरफ़ेस को छोड़ दिया जाता है, तो इंटरफ़ेस फ़ाइल का नाम शीर्षलेख के आधार से प्रत्यय .xml में जोड़ा गया है। विकल्प qdbuscpp2xml को दिए जा सकते हैं, जैसे कि "qdbuscpp2xml --help" निष्पादित करते समय पाए गए।

Qt5LinguistTools मैक्रोज़

Qt5LinguistTools पाया जाता है जब मैक्रोज़ उपलब्ध हैं।

मैक्रो विवरण
qt5_create_translation (qm_files निर्देशिका ... स्रोत ... ts_files ... विकल्प ...) आउट: qm_files In: निर्देशिका स्रोत ts_files विकल्प: एक निर्देशिका स्कैन के लिए एक्सटेंशन निर्दिष्ट करने के लिए लूपडेट को पास करने के लिए झंडे, जैसे-अनुकूलन। .Ts (lupdate के माध्यम से) और .qm (lrelease के माध्यम से) - निर्देशिकाओं और / या स्रोतों से फाइलें बनाने के लिए आदेश देता है। Ts फ़ाइलें स्रोत ट्री में बनाई गई और / या अपडेट की जाती हैं (जब तक कि पूर्ण पथ के साथ न दी गई हों)। Qm फ़ाइलें बिल्ड ट्री में उत्पन्न होती हैं। अनुवादों को अद्यतन करना आपके पुस्तकालय / निष्पादन योग्य की स्रोत सूची में qm_files को जोड़कर किया जा सकता है, इसलिए वे हमेशा अपडेट किए जाते हैं, या अपडेट किए जाने / उत्पन्न होने पर नियंत्रण करने के लिए एक कस्टम लक्ष्य जोड़कर।
qt5_add_translation (qm_files ts_files ...) आउट: qm_files In: ts_files .tsm .tsm - फ़ाइलों से बनाने के लिए कमांड उत्पन्न करता है। उत्पन्न फ़ाइलनाम qm_files में पाए जा सकते हैं। Ts_files का अस्तित्व होना चाहिए और इसे किसी भी तरह से अपडेट नहीं किया जाना चाहिए।