جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'qbs'.
2 نتیجه پیدا شد
-
کامبیز اسدزاده یک موضوع را ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #2cdb89; color: #000000;" >کتابخانه کیوت (Qt)</span>
سلام، همانطور که میدانید شرکت Qt از سه نوع سیستم ساخت مختلف برای برنامه های Qt پشتیبانی میکند. برای کاربران کیوت، در حال حاضر qmake به طور گسترده استفاده میشود. CMake در حال محبوب شدن بوده و واضح است که به خوبی مورد استقبال قرار گرفته است. جایگاه سوم Qbs، با پذیرش قابل توجهی کوچکتر و کم اهمیت تر است (هرچند شرکت کیوت قبلاً اعلام کرده بود که این ابزار در نسخهی ۶ کیوت به عنوان ابزار پیشفرض) ارائه خواهد شد. در یک نتیجه از آمار پرسش و سوال در مورد ابزار Qbs مشتریان این کمپانی به این نتیجه رسیدهاند که مشتریان در آینده CMake و qmake را بر qbs ترجیح خواهند داد. بنابراین برای توسعهی هرچه بیشتر دو ابزار قبلی از جمله CMake این شرکت تصمیم گرفته است تا منابع مرتبط با ابزار Qbs را از بین برده تا بتوانید به این صورت فرصت بهتری را برای افزایش کیفیت پشتیبانی از CMake را فراهم سازد. ابزار Qbs تا پایان سال ۲۰۱۹ همراه با نسخهی ۴.۹ کیوت کریتور پشتیبانی خواهد شد. طبق گفتهی این کمپانی ابزار کیوبس تحت مجوزهای تجاری و منبع باز است، بنابراین هرگونه حمایت جهت توسعهی زیرساختهای آن را مورد حمایت نیز قرار میدهند. به هر حال حذف ان ابزار این اجازه را برای تیم پشتیبانی خواهد داد ت به طور قابل توجهی پشتیبانی در مورد CMake بهبود یابد. -
کامبیز اسدزاده یک موضوع را ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #2cdb89; color: #000000;" >کتابخانه کیوت (Qt)</span>
معرفی ابزار کیوبس (Qbs) با آوای (“Cubes”) همانند qmake و cmake یک ابزار بسیار ساده و قدرتمند برای ساخت پروژه در پلتفرمهای مختلف میباشد. این ابزار قابلیت استفاده در هر نوع پروژه ای را دارد بهگونهای که مهم نیست زبانبرنامه نویسی٬ ابزارها و حتی کتابخانههای مورد استفاده چه چیزی باشند. کیوبس یک ابزار همه کاره است که یک نمودار ساخت از پروژههای سطح بالا مانند (qmake و cmake) فراهم میکند که علاوه بر آن وظیفه اجرای دستورات نمودار ساخته شده در سطح پایین را مانند (make) فراهم میکند. در این کتاب ما به پیش معرفی آن میپردازیم چرا که قرار است در نسخه ۶ کیوت جایگزین نوع .pro از qmake باشد. کیوبس برنامهها را بر پایهی اطلاعاتی میسازد که در قالب یک فایل QML فراهم میشوند. هر فایل پروژه مشخص میکند که پروژه میتواند شامل چندین محصول باشد و شما نوع پروژه میتوانیدمشخص کنید که یکی از انواع : نرم افزار، کتابخانه و غیره باشد. مشخصات سیستم مورد نیاز جهت استفاده از ابزار QBS حداقل نسخه ۵.۶.۰ به بعد خواهد بود. این ابزار همراه با Qt ارائه میشود. معرفی ساختار QBS در قالب QML کیوبس برای فایل پروژه خود از پسوند (*.qbs) استفاده میکند تا بتواند محتوای موجود در یک پروژه را معرفی کند. به طور کلی یک پروژه شامل چندین محتوا از محصول (پروژه) میباشد که در ادامه به آنها اشاره شده است. یک محصول هدفی از روند ساخت است٬ به طور معمول یک برنامه کاربردی٬ کتابخانه و یا شاید یک چیز دیگر میتواند هدف آن باشد. جهت بررسی و مدیریت Qbs وارد بخش Setting یا Perefrences شوید و زبانه Qbs را انتخاب کنید تا در این بخش به نسخه و پیکربندی مقادیر مربوط به Qbs دسترسی داشته باشید. مباحثی که در این پست آموزشی پوشش داده خواهد شد: نحوهی استفاده معرفی انواع پروژهها معرفی برخی از پر کاربردترین آیتمهای موجود در کیوبس مانند: پروژه Project زیر پروژه SubProject ویژگیها (خواصها) Properties اپلیکیشن Application اپلیکیشن سیپلاسپلاس CppApplication کتابخانه (پویا) DynamicLibrary کتابخانه (ایستا) StaticLibrary محصول Product پروفایل Profile گروهبندی Group وابستگیها Depends و ... معرفی ماژولهای پر کاربرد در کیوبس مانند: ماژول cpp جهت پیکربندی و پشتیبانی از C++ و ویژگیهای آن در کیوبس پیکربندی ماژولهای کیوت پیکربندی ویژگیهای پردازنده پیکربندی اختصاصی اندروید پیکربندی اختصاصی محصولات اپل پیکربندی Xcode پیکربندی ماژولهای کیوت پیکربندی Java و ... در صورت نیاز به مباحث دیگری نیز اشاره خواهد شد. نحوهی استفاده جهت استفاده از کیوبس کافی است با سینتکس JavaScript یا QML آشنا باشید. جهت پیکربندی یک پروژه سیپلاسپلاس نمونه کُد آن به صورت زیر خواهد بود: import qbs 1.0 Application { name: "helloworld" files: "main.cpp" Depends { name: "cpp" } } انواع پروژهها در کیوبس به چهار دستهی زیر تقسیم بندی میشوند: تولید اپلیکیشن ساده (Application) این نوع پروژه به عنوان یک آیتم از محصول میباشد. Application { Depends { name: "cpp" } } تولید اپلیکیشن تحت وابستکی و ویژگیهای سیپلاسپلاس (CppApplication) به عنوان یک محصول که تحت وابستگیهای ماژول Cpp میباشد استفاده میشود. CppApplication { cpp.cxxLanguageVersion: "c++11" files: [ "main.cpp", "qml.qrc", ] } تولید پروژه در قالب کتابخانهی پویا (DynamicLibrary) این نوع زمانی مورد استفاده قرار میگیرد که قرار است پروژه را در قالب یک خروجی کتابخانهی پویا تولید کنیم. Product { type: "dynamiclibrary" } تولید پروژه در قالب کتابخانهی استاتیک (StaticLibrary) این نوع زمانی مورد استفاده قرار میگیرد که قرار است پروژه را در قالب یک خروجی کتابخانهی ایستا تولید کنیم. مثال Product { type: "staticlibrary" } در یک پروژه برای مشخص کردن فایلهای قابل استفاده، نام و وابستگیها به سادگی میتوانند مشخص شوند. برای مثال در صورتی که پروژهی شما تحت فناوری کیوت و Qt Quick است کافی است مقدار Depends را مشخص کنید: Depends { name: "Qt.core" } Depends { name: "Qt.quick" } لیستی از آیتمهای (پر کاربرد و پایه) در QBS آیتم پروژه (Project) به عنوان یک آیتم از پروژه مجموعهای از محصولات و خواصهای مربوط به آنها را ارائه میدهد. آیتم زیر پروژه (Sub Project) یک ایتم زیر پروژه برای اضافه کردن یک پروژه به عنوان زیر مجموعه پروژه میباشد که در یک فایل جداگانه تعریف شده است. SubProject { filePath: "Subproject/OtherProject.qbs" Properties { name: "A sub-project" } } آیتم خواص (Properties) شرایط دستوری و خاصیتهای مورد نیاز را برای یک محصول ایجاد میکند. Product { Properties { condition: qbs.targetOS.contains("windows") ... ..... } } - خواص condition از نوع بولین جهت شرط سازی سایر موارد در یک محصول را فراهم میکند. - خواص overrideListProperties لیست خواص تنظیم شده را که در ماژولها به دست می آید را بر میگرداند. آیتم اپلیکیشن Application به عنوان یک آیتم با نوع 'application' برای یک محصول تعریف میشود. آیتم اپلیکیشن سیپلاسپلاس CppApplication به عنوان یک محصول با وابستگیهای لازم در سیپلاسپلاس میباشد. آیتم کتابخانهی پویا (DynamicLibrary) به عنوان یک آیتم برای محصول از نوع کتابخانه در قالب داینامیک (پویا) میباشد. import qbs Project { minimumQbsVersion: "1.7.1" CppApplication { type: "dynamiclibrary" ... Group { // Properties for the produced executable fileTagsFilter: "application" qbs.install: true } } } آیتم کتابخانهی ایستا (StaticLibrary) به عنوان یک آیتم برای محصول از نوع کتابخانه در قالب استاتیک (ایستا) میباشد. import qbs Project { minimumQbsVersion: "1.7.1" CppApplication { type: "staticlibrary" ... Group { // Properties for the produced executable fileTagsFilter: "application" qbs.install: true } } } آیتم محصول (Product) به عنوان یک محصول (Product) به طور معمول نتیجه یک فرآیند ساخت را ارائه میدهد. مجموعه ای از فایلهای ورودی و خروجی را مشخص میکند. برای مثال نمونهی زیر محصول را به عنوان یک پروژه سی پلای پلاس تنظیم میکند. Product { name: "helloworld" type: "application" files: "main.cpp" Depends { name: "cpp" } } خواص عضو در محصول (Product) aggregate : bool buildDirectory : path builtByDefault : bool condition : bool consoleApplication : bool destinationDirectory : string excludeFiles : stringList files : stringList multiplexByQbsProperties : stringList multiplexedType : stringList name : string qbsSearchPaths : stringList sourceDirectory : path targetName : string type : stringList version : string عضو aggregate اگر مقدارش برابر با true باشد، محصولی را که تحت وابستگی چندگانه باد در قالب یک محصول جمع آوری شده تولید خواهد کرد. در صورتی که شما نمیخواهید چنین کاری کنید بهتر است آن را به صورت تعریف نشده در نظر بگیرید. عضو buildDirectory دایرکتوری (ریشه مسیر) برای ساخت محصول است. فایلهای تولید شده بعد از کامپایل در این مسیر قرار خواهند گرفت که به صورت پیش فرض توسط Qbs مقدار دهی میشود و کاربر نمیتواند آن را تغییر دهد. عضو buildByDefault تعیین کننده ساخت محصول است. اگر مقدارش false باشد، عمل ساخت محصول تنها در زمان درخواست صریح صورت خواهد گرفت که دستور ساخت آن توسط پارامتر --products و یا استفاده از --all-products برای دستور ساخت استفاده خواهد شد. مقدار آن به صورت پیشفرض true میباشد. عضو condition تعیین میکند که محصول ساخته خواهد شد، اگر مقدارش false باشد، محصول ساخته نخواهد شد. مقدار این عضو به صورت پیشفرض true است. در ویندوز، تعیین میکند که برنامه تحت GUI تولید شود یا تحت کنسول. اگر مقدار آن برابر true باشد، یک اپلیکیشن تحت کنسول تولید خواهد شد. در غیر این صورت یک اپلیکیشن تحت رابط کاربری (GUI) تولید خواهد شد. در پلتفرمهای اپل، به نوع برنامه به صورت پیشفرض بستگی دارد. اگر مقدارش true باشد، یک برنامه اجرایی طبیعی تولید خواهد شد در غیر این صورت، بستهی نرمافزاری تولید میشود. عضو destinationDirectory مسیری است که در هدف مصنوعات قرار میگیرد. اگر یک مسیر نسبی داده شود آن را به عنوان دایرکتوری پایه برای project.buildDirectory تنظیم میکند. عضو exclude-files لیست فایلهای منبع یا سورس را شاملش نمیشود. برای موارد معروف و خاص مفید است. عضو files لیستی از فایل های منبع یا سورس را شامل میشود. عضو multiplexByQbsProperties مشخص میکند که کدام خواص ماژول qbs برای استفاده از محصولات چندگانه استفاده شود. عضو multiplexedType نوع محصول را برای نمونه محصولات چند گانه مشخص میکند. در صورتی که نیاز به این خواص ندارید میتوانید آن را تعریف نکنید. عضو name نام محصول را اعمال میکند. مقدار آن باید بر اساس یک عبارت جاوا اسکریپتی باشد. CppApplication { name: "hello" + "world" // valid } CppApplication { name: "app_" + qbs.targetOS.join("_") // invalid } عضو qbsSearchPath با مقدار project.qbsSearchPaths ادغام خواهد شد که لیستی از مسیرها را برای وارد کردن ماژولها جستجو میکند. عضو sourceDirectory دایرکتوری یا مسیر منبع را برای محصول مشخص میکند. این دایرکتوری برای فایلهایی که در محصول تعریف شده اند میباشد. عضو targetName نام پایه فایل است که با هدف مصنوعات برای محصول میباشد. مقدار نام فایلی که نامعتبر باشد توسط کاراکتر زیر خط جایگزین میشود. عضو type برچسبهای فایل مربط به مصنوعات محصول را مشخص میکند. عضو version شماره نسخه محصول را مشخص میکند. برای کتابخانههای به اشتراک گذاری شده و همچنین فایل Info.plist تحت محصولات اپل مورد استفاده میگیرد. آیتم پروفایل (Profile) به عنوان پروفایل سفارشی میتواند برای تعریف اهداف و شرایط ساخت بر روی یک ماشین خاص تنظیم شود. Profile { name: "my-special-profile" qbs.toolchainType: "gcc" qbs.targetPlatform: "linux" qbs.architecture: "armv7a" cpp.toolchainInstallPath: "/opt/special-gcc/bin" cpp.toolchainPrefix: "arm-linux-gnueabi-" } qbs.profiles: ["my-special-profile"] آیتم گروه (Group) جهت تعریف گروههای مختلف در فایلهایی که شامل یک محصول میباشند مورد استفاده قرار میگیرد. این ویژگی در محیط توسعه برای مدیریت پروژههای بزرگ بسیار کارآمد و مفید است. Application { Group { name: "common files" files: ["myclass.h", "myclass_common_impl.cpp"] } Group { name: "Windows files" condition: qbs.targetOS.contains("windows") files: "myclass_win_impl.cpp" } Group { name: "Unix files" condition: qbs.targetOS.contains("unix") files: "unixhelper.cpp" Group { name: "Linux files" condition: qbs.targetOS.contains("linux") files: "myclass_linux_impl.cpp" } Group { name: "FreeBSD files" condition: qbs.targetOS.contains("freebsd") files: "myclass_freebsd_impl.cpp" } Group { name: "macOS files" condition: qbs.targetOS.contains("macos") files: "myclass_macos_impl.cpp" } Group { name: "PS4 Pro files" condition: qbs.targetOS.contains("linux") files: "myclass_macos_impl.cpp" } Group { name: "Xbox One X files" condition: qbs.targetOS.contains("windows") files: "myclass_macos_impl.cpp" } } Group { name: "Files to install" qbs.install: true qbs.installDir: "share" files: "runtime_resource.txt" } } آیتم وابستگی (Depends) یک آیتم وابستگی در یک محصول یا ماژول تعریف میشود. به عنوان مثال محصول زیر ماژول Qt Quick، Qt Core و Qt Gui را بارگیری میکند. Product { Depends { name: "Qt.core" } Depends { name: "Qt.quick" } Depends { name: "Qt.gui" } } و یا به روش زیر تحت کتابخانهی Qt ماژولهای مربوطه را بارگیری میکند. Product { Depends { name: "Qt"; submodules: ["core", "quick", "gui"] } } ترکیبی از ماژولهای مختلف از پروژههای مختلف به صورت زیر خواهد بود: Product { Depends { name: "cpp" } Depends { name: "MyEngine"; submodules: ["module1", "module2", "module3"] } Depends { name: "Qt"; submodules: ["core", "quick", "gui"] } } معرفی ماژولهای پر کاربرد در Qbs ماژول cpp جهت پیکربندی و پشتیبانی از C++ و ویژگیهای آن در کیوبس برخی از ویژگیهای موجود در این ماژول به صورت زیر آورده شدهاند: allowUnresolvedSymbols : bool alwaysUseLipo : bool architecture : string archiverName : string archiverPath : string assemblerFlags : stringList assemblerName : string assemblerPath : string automaticReferenceCounting : bool cFlags : stringList cLanguageVersion : stringList combineCSources : bool combineCxxSources : bool combineObjcSources : bool combineObjcxxSources : bool commonCompilerFlags : stringList compilerDefinesByLanguage : var compilerFrameworkPaths : pathList compilerIncludePaths : pathList compilerLibraryPaths : pathList compilerName : string compilerPath : string compilerPathByLanguage : var compilerVersionMajor : int compilerVersionMinor : int compilerVersionPatch : int compilerWrapper : stringList cppFlags : stringList cxxFlags : stringList cxxLanguageVersion : stringList cxxStandardLibrary : string debugInformation : bool defines : stringList discardUnusedData : bool distributionFrameworkPaths : pathList distributionIncludePaths : pathList distributionLibraryPaths : pathList driverFlags : stringList driverLinkerFlags : stringList dsymutilFlags : stringList dsymutilPath : string dynamicLibraries : stringList enableCompilerDefinesByLanguage : stringList enableExceptions : bool enableReproducibleBuilds : bool enableRtti : bool endianness : string entryPoint : string exceptionHandlingModel : string exportedSymbolsCheckMode : string frameworkPaths : pathList frameworks : stringList generateManifestFile : bool includePaths : pathList libraryPaths : pathList linkerFlags : stringList linkerMode : string linkerName : string linkerPath : string linkerWrapper : stringList lipoPath : string minimumIosVersion : string minimumMacosVersion : string minimumTvosVersion : string minimumWatchosVersion : string minimumWindowsVersion : string nmName : string nmPath : string objcFlags : stringList objcopyName : string objcopyPath : string objcxxFlags : stringList optimization : string platformDefines : stringList positionIndependentCode : bool prefixHeaders : pathList requireAppContainer : bool requireAppExtensionSafeApi : bool rpathOrigin : string rpaths : stringList runtimeLibrary : string separateDebugInformation : bool soVersion : string sonamePrefix : string staticLibraries : stringList stripName : string stripPath : string systemFrameworkPaths : pathList systemIncludePaths : pathList systemRunPaths : stringList treatSystemHeadersAsDependencies : bool treatWarningsAsErrors : bool useCPrecompiledHeader : bool useCxxPrecompiledHeader : bool useLanguageVersionFallback : bool useObjcPrecompiledHeader : bool useObjcxxPrecompiledHeader : bool useRPathLink : bool useRPaths : bool variantSuffix : string visibility : string warningLevel : string weakFrameworks : stringList windowsApiAdditionalPartitions : stringList windowsApiCharacterSet : string windowsApiFamily : string با توجه به لیست بالا، به برخی از ویژگیهای موجود در این لیست اشاره میکنیم. ویژگی cxxLanguageVersion و cLanguageVersion جهت تعیین کردن پشتیبانی از نسخهی زبانهای سیپلاسپلاس و سی مورد استفاده قرار میگیرد که مشخصههای آن به ترتیب برای سیپلاسپلاس c++98 | c++11 | c++14 | c++17 و برای سی c89 | c98 | c11 میباشند. cpp.cLanguageVersion: "c11" cpp.cxxLanguageVersion: "c++17"