CMake Variables: Difference between revisions

From binaryoption
Jump to navigation Jump to search
Баннер1
(@pipegas_WP)
 
(@pipegas_WP)
Line 1: Line 1:
# متغيرات CMake
## متغيرات CMake: دليل شامل للمبتدئين


متغيرات CMake هي أساس نظام البناء CMake. فهي تسمح بتخصيص عملية البناء، وتحديد الخيارات، وتخزين المعلومات التي يستخدمها نظام البناء. فهم هذه المتغيرات أمر بالغ الأهمية لأي شخص يعمل مع CMake، سواء كان مطورًا مبتدئًا أو خبيرًا. هذه المقالة ستشرح بالتفصيل أنواع متغيرات CMake، وكيفية تعريفها، واستخدامها، وكيفية تأثيرها على عملية البناء.
تُعدّ متغيرات CMake جزءًا أساسيًا من عملية بناء المشاريع باستخدام نظام CMake. فهم هذه المتغيرات ضروري لأي شخص يرغب في تخصيص عملية البناء، وإدارة الاعتماديات، وتعديل سلوك CMake. يهدف هذا المقال إلى تقديم شرح مفصل لمتغيرات CMake للمبتدئين، مع التركيز على الاستخدامات الشائعة وأفضل الممارسات.


== أنواع متغيرات CMake ==
### ما هي متغيرات CMake؟


توجد أنواع مختلفة من متغيرات CMake، ولكل منها خصائصه واستخداماته:
متغيرات CMake هي ببساطة أزواج اسم-قيمة تُستخدم لتخزين المعلومات التي يمكن الوصول إليها بواسطة CMake أثناء عملية البناء. يمكن استخدام هذه المتغيرات لتحديد مسارات الملفات، وتعيين خيارات المترجم، وتحديد العلامات، والتحكم في سلوك CMake بشكل عام.  هناك نوعان رئيسيان من المتغيرات:


* '''المتغيرات العادية:''' هذه هي المتغيرات الأكثر شيوعًا، ويمكن أن تخزن أي سلسلة نصية. يتم استخدامها لتخزين المسارات، والخيارات، وأي معلومات أخرى تحتاجها عملية البناء. مثال: ''CMAKE_INSTALL_PREFIX''
*   **المتغيرات العادية:**  تُستخدم لتخزين القيم التي يمكن تغييرها بواسطة المستخدم أو بواسطة CMakeLists.txt.
* '''المتغيرات المخزنة مؤقتًا:''' يتم تعريف هذه المتغيرات داخل نطاق معين (مثل دالة أو ملف CMake). تختفي قيمتها عند الخروج من هذا النطاق.
*   **المتغيرات المخزنة (Cached Variables):** تُخزن قيمها في ذاكرة التخزين المؤقت لـ CMake، مما يسمح للمستخدم بتعديلها بسهولة عبر واجهة المستخدم الرسومية (مثل ccmake أو cmake-gui) أو من سطر الأوامر.
* '''المتغيرات ذات القيمة الناتجة:''' يتم تعريف هذه المتغيرات تلقائيًا بواسطة CMake بناءً على بعض الشروط أو العمليات. مثال: ''CMAKE_CXX_COMPILER'' الذي يحدد المترجم المستخدم لـ C++.
* '''المتغيرات المخصصة:''' هي المتغيرات التي يعرفها المستخدم لتلبية احتياجات المشروع الخاصة.


== تعريف متغيرات CMake ==
### أنواع متغيرات CMake


هناك عدة طرق لتعريف متغيرات CMake:
CMake يدعم أنواعًا مختلفة من المتغيرات:


* '''باستخدام الأمر set:''' هذا هو الأسلوب الأكثر شيوعًا.
*   **String:** سلسلة نصية. غالبًا ما تستخدم لتخزين المسارات والأسماء.
*  **Integer:** عدد صحيح.
*  **Boolean:** قيمة منطقية (TRUE أو FALSE).
*  **List:** قائمة من القيم.
*  **Path:** مسار إلى ملف أو دليل.


  ```cmake
### كيفية تعريف المتغيرات
  set(MY_VARIABLE "value")
  ```


* '''من سطر الأوامر:''' يمكن تمرير المتغيرات إلى CMake من سطر الأوامر عند تشغيل الأمر ''cmake''.
يمكن تعريف المتغيرات في CMakeLists.txt باستخدام الأمر `set()`.


  ```bash
```cmake
  cmake -DMY_VARIABLE="value" .
set(MY_VARIABLE "Hello, CMake!")
  ```
set(MY_INTEGER 123)
set(MY_BOOLEAN TRUE)
```


* '''عن طريق ملفات التكوين:''' يمكن تحديد المتغيرات في ملفات CMakeLists.txt.
لتعريف متغير مخزن (cached variable)، استخدم الأمر `set()` مع الخيار `CACHE`.


== استخدام متغيرات CMake ==
```cmake
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the build type." FORCE)
```


يمكن استخدام متغيرات CMake في العديد من السياقات:
الخيار `FORCE` يضمن استبدال أي قيمة موجودة للمتغير.


* '''في أوامر CMake:''' يمكن استخدام المتغيرات كقيم لمعلمات الأوامر.
### كيفية الوصول إلى المتغيرات


  ```cmake
يمكن الوصول إلى قيمة المتغير باستخدام بناء الجملة `${MY_VARIABLE}`.
  add_executable(my_program main.cpp)
  target_link_libraries(my_program ${MY_LIBRARY})
  ```


* '''في الشروط:''' يمكن استخدام المتغيرات في عبارات ''if'' للتحكم في عملية البناء.
```cmake
message(STATUS "Value of MY_VARIABLE: ${MY_VARIABLE}")
```


  ```cmake
### المتغيرات المدمجة (Built-in Variables)
  if(MY_VARIABLE)
    message(STATUS "MY_VARIABLE is defined")
  endif()
  ```


* '''للتوسع في المسارات:''' يمكن استخدام المتغيرات لإنشاء مسارات ديناميكية.
CMake يوفر مجموعة من المتغيرات المدمجة التي توفر معلومات حول النظام والبيئة وعملية البناء. بعض المتغيرات الشائعة تشمل:


  ```cmake
`CMAKE_SOURCE_DIR`: دليل المصدر الرئيسي للمشروع.
  set(SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)
`CMAKE_BINARY_DIR`: دليل البناء.
  add_library(my_library ${SOURCE_DIR}/mylibrary.cpp)
*  `CMAKE_BUILD_TYPE`: نوع البناء (Debug، Release، إلخ).
  ```
*  `CMAKE_CXX_COMPILER`:  مسار مترجم ++C.
*  `CMAKE_C_COMPILER`: مسار مترجم C.
*  `CMAKE_SYSTEM_NAME`: اسم نظام التشغيل.
*  `CMAKE_SYSTEM_PROCESSOR`: معالج النظام.
*  `PROJECT_NAME`: اسم المشروع (يتم تعيينه بواسطة الأمر `project()`).
`PROJECT_VERSION`: رقم إصدار المشروع (يتم تعيينه بواسطة الأمر `project()`).


== متغيرات CMake الأساسية ==
### استخدام المتغيرات في بناء المشروع


CMake يوفر مجموعة كبيرة من المتغيرات المحددة مسبقًا. بعض المتغيرات الأكثر استخدامًا تشمل:
تُستخدم متغيرات CMake على نطاق واسع في عملية بناء المشروع.  يمكن استخدامها لتحديد خيارات المترجم، وإضافة مسارات التضمين، وتحديد المكتبات المرتبطة، وإنشاء ملفات التكوين.


{| class="wikitable"
مثال:
|+ متغيرات CMake الأساسية
|-
| المتغير || الوصف || مثال
| CMAKE_SOURCE_DIR || دليل المصدر الرئيسي للمشروع || /home/user/myproject
| CMAKE_BINARY_DIR || دليل البناء || /home/user/myproject/build
| CMAKE_CXX_COMPILER || مسار مترجم C++ || /usr/bin/g++
| CMAKE_C_COMPILER || مسار مترجم C || /usr/bin/gcc
| CMAKE_BUILD_TYPE || نوع البناء (Debug, Release, إلخ.) || Release
| CMAKE_INSTALL_PREFIX || دليل التثبيت الافتراضي || /usr/local
| CMAKE_PREFIX_PATH || قائمة الأدلة التي يتم البحث فيها عن الحزم المثبتة || /opt/mylibrary;/usr/local
|}


== نطاق المتغيرات ==
```cmake
set(INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/include")
include_directories(${INCLUDE_DIRS})


كما ذكرنا سابقًا، للمتغيرات نطاق. فهم النطاق مهم لتجنب الأخطاء.
set(LIBRARY_DIRS "${CMAKE_SOURCE_DIR}/lib")
link_directories(${LIBRARY_DIRS})


* '''النطاق العام:''' المتغيرات المعرفة خارج أي دالة أو ملف CMake لها نطاق عام ويمكن الوصول إليها من أي مكان في المشروع.
add_executable(my_program main.cpp)
* '''النطاق المحلي:''' المتغيرات المعرفة داخل دالة أو ملف CMake لها نطاق محلي ولا يمكن الوصول إليها من الخارج.
target_link_libraries(my_program my_library)
```


== أفضل الممارسات ==
###  التعامل مع القوائم (Lists)


* '''استخدم أسماء وصفية للمتغيرات:''' هذا يجعل الكود أكثر قابلية للقراءة والفهم.
يمكن استخدام المتغيرات لتخزين قوائم من القيم. يمكن معالجة هذه القوائم باستخدام أوامر CMake مثل `list()` و `foreach()`.
* '''تجنب استخدام المتغيرات العامة قدر الإمكان:''' استخدم المتغيرات المحلية كلما أمكن ذلك لتقليل خطر التعارضات.
* '''وثق متغيراتك:''' اشرح الغرض من كل متغير وكيفية استخدامه.
* '''استخدم الأمر cache:''' يمكن استخدام الأمر ''set'' مع الخيار ''CACHE'' لتخزين المتغيرات في ذاكرة التخزين المؤقت لـ CMake. هذا يسمح للمستخدمين بتعديل قيم المتغيرات بسهولة باستخدام واجهة المستخدم الرسومية لـ CMake.


  ```cmake
```cmake
  set(MY_VARIABLE "value" CACHE STRING "Description of my variable")
set(MY_LIST "item1" "item2" "item3")
  ```
list(LENGTH MY_LIST MY_LIST_LENGTH)
message(STATUS "Length of MY_LIST: ${MY_LIST_LENGTH}")


== أمثلة متقدمة ==
foreach(ITEM ${MY_LIST})
  message(STATUS "Item: ${ITEM}")
endforeach()
```


* '''التحقق من وجود ملف:'''
### أفضل الممارسات


  ```cmake
*  استخدم أسماء وصفية للمتغيرات.
  if(EXISTS ${MY_FILE})
*  قم بتعليق CMakeLists.txt الخاص بك بشكل جيد لشرح الغرض من المتغيرات.
    message(STATUS "File ${MY_FILE} exists")
*  استخدم المتغيرات المخزنة (cached variables) للسماح للمستخدم بتخصيص عملية البناء.
  endif()
*  تجنب استخدام المتغيرات العامة (global variables) قدر الإمكان.  بدلاً من ذلك، استخدم المتغيرات المحلية داخل الوظائف والنطاقات.
  ```
*  استخدم الأمر `find_package()` للعثور على الاعتماديات الخارجية.


* '''التحقق من وجود دليل:'''
###  CMake و تداول الخيارات الثنائية (ربط مفاهيمي)


  ```cmake
على الرغم من أن CMake لا يرتبط بشكل مباشر بتداول الخيارات الثنائية، إلا أن مبادئ إدارة الاعتماديات وتكوين البيئة التي يطبقها CMake يمكن أن تكون ذات صلة.  تمامًا كما تحتاج إلى تحديد الاعتماديات الصحيحة (المكتبات، المترجمات) لبناء برنامج، يحتاج المتداول إلى تحديد المؤشرات الصحيحة (التحليل الفني، الأخبار الاقتصادية، تحليل حجم التداول) لاتخاذ قرارات تداول مستنيرة.  يمكن تشبيه متغيرات CMake بالمعلمات التي يتم ضبطها في استراتيجية تداول لتحسين الأداء.
  if(IS_DIRECTORY ${MY_DIRECTORY})
    message(STATUS "Directory ${MY_DIRECTORY} exists")
  endif()
  ```


* '''استخدام القوائم:'''
### استراتيجيات التداول والتحليل الفني


  ```cmake
*  [[استراتيجية مارتينجال]]
  set(MY_LIST item1 item2 item3)
*  [[استراتيجية المضاعفة]]
  foreach(item ${MY_LIST})
*  [[استراتيجية المتوسطات المتحركة]]
    message(STATUS "Item: ${item}")
*  [[استراتيجية مؤشر القوة النسبية (RSI)]]
  endforeach()
*  [[استراتيجية بولينجر باند]]
  ```
*  [[استراتيجية MACD]]
*  [[تحليل الشموع اليابانية]]
*  [[التحليل الموجي إليوت]]
*  [[التحليل الفني الشامل]]
*  [[التحليل الأساسي]]
*  [[استراتيجيات إدارة المخاطر]]
*  [[تداول الأخبار]]
*  [[تداول الاختراقات]]
*  [[تداول الارتدادات]]
*  [[تداول النطاق]]


== العلاقة مع أدوات أخرى ==
### تحليل حجم التداول


CMake غالبًا ما يستخدم مع أدوات أخرى مثل:
*  [[حجم التداول كمؤشر للاتجاه]]
*  [[حجم التداول وتأكيده للأنماط السعرية]]
*  [[حجم التداول وتحديد نقاط الدعم والمقاومة]]
*  [[حجم التداول والتقلبات]]
*  [[التحليل المتقدم لحجم التداول]]


* [[CTest]]: نظام اختبار.
###  الموارد الإضافية
* [[CPack]]: نظام تعبئة.
* [[CDash]]: لوحة معلومات لمراقبة البناء والاختبار.
* [[Git]]: نظام التحكم في الإصدار.
* [[Doxygen]]: أداة لإنشاء الوثائق.


== استراتيجيات تداول الخيارات الثنائية (روابط ذات صلة) ==
*  [[CMake Documentation]]
*  [[CMake Wiki]]
*  [[CMake Tutorial]]
*  [[CMake FAQ]]
*  [[CMake Mailing Lists]]
*  [[CMake Stack Overflow]]
*  [[CMake project examples]]
*  [[Managing Dependencies with CMake]]
*  [[Building and Installing Projects with CMake]]
*  [[CMake Best Practices]]
*  [[Advanced CMake Techniques]]
*  [[Using CMake with IDEs]]
*  [[CMake and Cross-Platform Development]]
*  [[CMake Modules and Functions]]
*  [[CMake Generators]]


* [[استراتيجية 60 ثانية]]
[[Category:الفئة:CMake]]
* [[استراتيجية مارتينجال]]
* [[استراتيجية المضاعفة]]
* [[استراتيجية المتوسط المتحرك]]
* [[استراتيجية اختراق النطاق]]
* [[استراتيجية البولينجر باند]]
* [[استراتيجية RSI]]
* [[استراتيجية MACD]]
* [[استراتيجية Fibonacci Retracement]]
* [[استراتيجية Ichimoku Cloud]]
* [[استراتيجية Price Action]]
* [[استراتيجية التداول المتأرجح]]
* [[استراتيجية التداول اليومي]]
* [[استراتيجية التداول طويل الأجل]]
* [[استراتيجية التداول بناءً على الأخبار]]
 
== التحليل الفني وتحليل حجم التداول (روابط ذات صلة) ==
 
* [[الشموع اليابانية]]
* [[خطوط الاتجاه]]
* [[مستويات الدعم والمقاومة]]
* [[مؤشر القوة النسبية (RSI)]]
* [[مؤشر المتوسط المتحرك للتقارب والتباعد (MACD)]]
* [[حجم التداول]]
* [[التحليل الأساسي]]
* [[التحليل الفني]]
* [[إدارة المخاطر]]
* [[علم النفس التجاري]]
* [[الرافعة المالية]]
* [[التقلب]]
* [[السيولة]]
* [[التحليل بين الأسواق]]
* [[التحليل الموجي]]
 
== الموارد الإضافية ==
 
* [[وثائق CMake الرسمية]]
* [[CMake Wiki]]
* [[مجتمعات CMake عبر الإنترنت]]
 
[[CMake]]
[[CMakeLists.txt]]
[[أوامر CMake]]
[[نطاق المتغيرات]]
[[ذاكرة التخزين المؤقت لـ CMake]]
[[CTest]]
[[CPack]]
[[CDash]]
[[Git]]
[[Doxygen]]
[[المتغيرات المخزنة مؤقتًا]]
[[المتغيرات ذات القيمة الناتجة]]
[[المتغيرات المخصصة]]
[[CMAKE_SOURCE_DIR]]
[[CMAKE_BINARY_DIR]]
[[CMAKE_CXX_COMPILER]]
[[CMAKE_C_COMPILER]]
[[CMAKE_BUILD_TYPE]]
[[CMAKE_INSTALL_PREFIX]]
[[CMAKE_PREFIX_PATH]]
[[set (CMake command)]]
[[if (CMake command)]]
[[foreach (CMake command)]]
[[EXISTS (CMake command)]]
[[IS_DIRECTORY (CMake command)]]
[[CACHE (CMake keyword)]]
[[قائمة CMake]]
[[أفضل ممارسات CMake]]
[[أخطاء CMake الشائعة]]
[[تصحيح أخطاء CMake]]
[[توسيع CMake]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[CMake GitLab]]
[[CMake Bitbucket]]
[[CMake SourceForge]]
[[CMake Download]]
[[CMake Install]]
[[CMake Update]]
[[CMake Uninstall]]
[[CMake Clean]]
[[CMake Configure]]
[[CMake Build]]
[[CMake Run]]
[[CMake Debug]]
[[CMake Profile]]
[[CMake Variables]]
[[CMake Functions]]
[[CMake Macros]]
[[CMake Policies]]
[[CMake Properties]]
[[CMake Targets]]
[[CMake Dependencies]]
[[CMake Modules]]
[[CMake Generators]]
[[CMake Packaging]]
[[CMake Testing]]
[[CMake Documentation]]
[[CMake Tutorials]]
[[CMake Examples]]
[[CMake Community]]
[[CMake Mailing Lists]]
[[CMake Forums]]
[[CMake Stack Overflow]]
[[CMake GitHub]]
[[


== ابدأ التداول الآن ==
== ابدأ التداول الآن ==

Revision as of 23:35, 22 April 2025

    1. متغيرات CMake: دليل شامل للمبتدئين

تُعدّ متغيرات CMake جزءًا أساسيًا من عملية بناء المشاريع باستخدام نظام CMake. فهم هذه المتغيرات ضروري لأي شخص يرغب في تخصيص عملية البناء، وإدارة الاعتماديات، وتعديل سلوك CMake. يهدف هذا المقال إلى تقديم شرح مفصل لمتغيرات CMake للمبتدئين، مع التركيز على الاستخدامات الشائعة وأفضل الممارسات.

      1. ما هي متغيرات CMake؟

متغيرات CMake هي ببساطة أزواج اسم-قيمة تُستخدم لتخزين المعلومات التي يمكن الوصول إليها بواسطة CMake أثناء عملية البناء. يمكن استخدام هذه المتغيرات لتحديد مسارات الملفات، وتعيين خيارات المترجم، وتحديد العلامات، والتحكم في سلوك CMake بشكل عام. هناك نوعان رئيسيان من المتغيرات:

  • **المتغيرات العادية:** تُستخدم لتخزين القيم التي يمكن تغييرها بواسطة المستخدم أو بواسطة CMakeLists.txt.
  • **المتغيرات المخزنة (Cached Variables):** تُخزن قيمها في ذاكرة التخزين المؤقت لـ CMake، مما يسمح للمستخدم بتعديلها بسهولة عبر واجهة المستخدم الرسومية (مثل ccmake أو cmake-gui) أو من سطر الأوامر.
      1. أنواع متغيرات CMake

CMake يدعم أنواعًا مختلفة من المتغيرات:

  • **String:** سلسلة نصية. غالبًا ما تستخدم لتخزين المسارات والأسماء.
  • **Integer:** عدد صحيح.
  • **Boolean:** قيمة منطقية (TRUE أو FALSE).
  • **List:** قائمة من القيم.
  • **Path:** مسار إلى ملف أو دليل.
      1. كيفية تعريف المتغيرات

يمكن تعريف المتغيرات في CMakeLists.txt باستخدام الأمر `set()`.

```cmake set(MY_VARIABLE "Hello, CMake!") set(MY_INTEGER 123) set(MY_BOOLEAN TRUE) ```

لتعريف متغير مخزن (cached variable)، استخدم الأمر `set()` مع الخيار `CACHE`.

```cmake set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the build type." FORCE) ```

الخيار `FORCE` يضمن استبدال أي قيمة موجودة للمتغير.

      1. كيفية الوصول إلى المتغيرات

يمكن الوصول إلى قيمة المتغير باستخدام بناء الجملة `${MY_VARIABLE}`.

```cmake message(STATUS "Value of MY_VARIABLE: ${MY_VARIABLE}") ```

      1. المتغيرات المدمجة (Built-in Variables)

CMake يوفر مجموعة من المتغيرات المدمجة التي توفر معلومات حول النظام والبيئة وعملية البناء. بعض المتغيرات الشائعة تشمل:

  • `CMAKE_SOURCE_DIR`: دليل المصدر الرئيسي للمشروع.
  • `CMAKE_BINARY_DIR`: دليل البناء.
  • `CMAKE_BUILD_TYPE`: نوع البناء (Debug، Release، إلخ).
  • `CMAKE_CXX_COMPILER`: مسار مترجم ++C.
  • `CMAKE_C_COMPILER`: مسار مترجم C.
  • `CMAKE_SYSTEM_NAME`: اسم نظام التشغيل.
  • `CMAKE_SYSTEM_PROCESSOR`: معالج النظام.
  • `PROJECT_NAME`: اسم المشروع (يتم تعيينه بواسطة الأمر `project()`).
  • `PROJECT_VERSION`: رقم إصدار المشروع (يتم تعيينه بواسطة الأمر `project()`).
      1. استخدام المتغيرات في بناء المشروع

تُستخدم متغيرات CMake على نطاق واسع في عملية بناء المشروع. يمكن استخدامها لتحديد خيارات المترجم، وإضافة مسارات التضمين، وتحديد المكتبات المرتبطة، وإنشاء ملفات التكوين.

مثال:

```cmake set(INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/include") include_directories(${INCLUDE_DIRS})

set(LIBRARY_DIRS "${CMAKE_SOURCE_DIR}/lib") link_directories(${LIBRARY_DIRS})

add_executable(my_program main.cpp) target_link_libraries(my_program my_library) ```

      1. التعامل مع القوائم (Lists)

يمكن استخدام المتغيرات لتخزين قوائم من القيم. يمكن معالجة هذه القوائم باستخدام أوامر CMake مثل `list()` و `foreach()`.

```cmake set(MY_LIST "item1" "item2" "item3") list(LENGTH MY_LIST MY_LIST_LENGTH) message(STATUS "Length of MY_LIST: ${MY_LIST_LENGTH}")

foreach(ITEM ${MY_LIST})

 message(STATUS "Item: ${ITEM}")

endforeach() ```

      1. أفضل الممارسات
  • استخدم أسماء وصفية للمتغيرات.
  • قم بتعليق CMakeLists.txt الخاص بك بشكل جيد لشرح الغرض من المتغيرات.
  • استخدم المتغيرات المخزنة (cached variables) للسماح للمستخدم بتخصيص عملية البناء.
  • تجنب استخدام المتغيرات العامة (global variables) قدر الإمكان. بدلاً من ذلك، استخدم المتغيرات المحلية داخل الوظائف والنطاقات.
  • استخدم الأمر `find_package()` للعثور على الاعتماديات الخارجية.
      1. CMake و تداول الخيارات الثنائية (ربط مفاهيمي)

على الرغم من أن CMake لا يرتبط بشكل مباشر بتداول الخيارات الثنائية، إلا أن مبادئ إدارة الاعتماديات وتكوين البيئة التي يطبقها CMake يمكن أن تكون ذات صلة. تمامًا كما تحتاج إلى تحديد الاعتماديات الصحيحة (المكتبات، المترجمات) لبناء برنامج، يحتاج المتداول إلى تحديد المؤشرات الصحيحة (التحليل الفني، الأخبار الاقتصادية، تحليل حجم التداول) لاتخاذ قرارات تداول مستنيرة. يمكن تشبيه متغيرات CMake بالمعلمات التي يتم ضبطها في استراتيجية تداول لتحسين الأداء.

      1. استراتيجيات التداول والتحليل الفني
      1. تحليل حجم التداول
      1. الموارد الإضافية

ابدأ التداول الآن

سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер