CMake 3.16 вСрсия Π½Π° систСмата Π·Π° компилация

Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΎ ΠΎΡ‚ пусканС Π½Π° ΠΌΠ΅ΠΆΠ΄ΡƒΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° скриптовС Π·Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ CMake 3.16, ΠΊΠΎΠΉΡ‚ΠΎ дСйства ΠΊΠ°Ρ‚ΠΎ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° Autotools ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ KDE, LLVM/Clang, MySQL, MariaDB, ReactOS ΠΈ Blender. ΠšΠΎΠ΄ΡŠΡ‚ CMake Π΅ написан Π½Π° C++ ΠΈ сС разпространява ΠΏΠΎΠ΄ BSD Π»ΠΈΡ†Π΅Π½Π·.

CMake сС ΠΎΡ‚Π»ΠΈΡ‡Π°Π²Π° с прСдоставянСто Π½Π° прост скриптов Π΅Π·ΠΈΠΊ, срСдство Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° функционалността Ρ‡Ρ€Π΅Π· ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π±Ρ€ΠΎΠΉ зависимости (Π±Π΅Π· ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°Π½Π΅ с M4, Perl ΠΈΠ»ΠΈ Python), ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° инструмСнти Π·Π° ΠΊΡ€ΡŠΡΡ‚ΠΎΡΠ°Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅, ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° компилация Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΡˆΠΈΡ€ΠΎΠΊ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ систСми Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ, ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ctest ΠΈ cpack Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° тСстови скриптовС ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° cmake-gui Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° подобрСния:

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Objective C (β€žOBJCβ€œ) ΠΈ Objective Π΅Π·ΠΈΡ†ΠΈ
    C++ (β€žOBJCXXβ€œ), ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ project() ΠΈ enable_language(), слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ във Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ β€ž.mβ€œ β€ž.mmβ€œ Ρ‰Π΅ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΊΠ°Ρ‚ΠΎ Objective C ΠΈ Objective C++ ΠΊΠΎΠ΄, Π° Π½Π΅ ΠΊΠ°Ρ‚ΠΎ C++, ΠΊΠ°ΠΊΡ‚ΠΎ бСшС ΠΏΡ€Π΅Π΄ΠΈ;

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Clang Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Solaris;
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π½Π° командния Ρ€Π΅Π΄: β€œcmake -E true|false” Π·Π° ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ 0 ΠΈ 1; "cmake --trace-redirect=" вмСсто Ρ‚ΠΎΠ²Π° Π΄Π° прСнасочва информацията Π·Π° прослСдяванС към Ρ„Π°ΠΉΠ»
    "stderr"; ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° "cmake --loglevel" Π΅ ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π° Π½Π° "--log-level", Π·Π° Π΄Π° сС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ;

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€œtarget_precompile_headers()” Π·Π° изброяванС Π½Π° списъка със Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° компилация (намалява Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅);
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ свойство β€œUNITY_BUILD”, ΠΊΠΎΠ΅Ρ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° пакСтния Ρ€Π΅ΠΆΠΈΠΌ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ, Π·Π° Π΄Π° сС ускори ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ;
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ β€œfind_file()”, β€œfind_library()”, β€œfind_path()”,
    β€žfind_package()β€œ ΠΈ β€žfind_program()β€œ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΡŠΡ‚ΠΈΡ‰Π°, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ спорСд ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ опрСдСлят ΠΏΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π° Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.
    ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ "CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH", "CMAKE_FIND_USE_CMAKE_PATH", "CMAKE_FIND_USE_CMAKE_SYSTEM_PATH", "CMAKE_FIND_USE_PACKAGE_ROOT_PATH", "CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH" ΠΈ "CMAKE_FIND_USE_ PACKAGE_REGIST" сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° основнитС ΠΏΡŠΡ‚ΠΈΡ‰Π° Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ RY";

  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ€Π΅ΠΆΠΈΠΌΡŠΡ‚ β€žfile(GET_RUNTIME_DEPENDENCIES)β€œ към ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€žfile()β€œ, която Π²ΠΈ позволява рСкурсивно Π΄Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Ρ‚Π΅ списъка с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΡ€ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° изпълним Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π Π΅ΠΆΠΈΠΌΡŠΡ‚ Π·Π°ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° GetPrerequisites(), която Π²Π΅Ρ‡Π΅ Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½Π°;
  • ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€œctest(1)” Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° сСриализиранС Π½Π° тСстовС въз основа Π½Π° рСсурситС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° всСки тСст;
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° β€žCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRYβ€œ Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½Π° ΠΈ трябва Π΄Π° бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½Π° ΠΎΡ‚ β€žCMAKE_FIND_USE_PACKAGE_REGISTRYβ€œ;
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° AIX ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ свойството "ENABLE_EXPORTS", Π² допълнСниС към изпълнимия Ρ„Π°ΠΉΠ», сСга сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½ Ρ„Π°ΠΉΠ» Π·Π° Π»ΠΈΠ½ΠΊΠ΅Ρ€Π°, записан с Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ".imp". Π’ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ, създадСни Ρ‡Ρ€Π΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° "add_library()" с опцията "MODULE", Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° "target_link_library()". Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Π½Π° AIX Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ CMake сСга прСдоставя цялата Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° символна информация Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅. Π—Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ»ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π΅ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, трябва ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Π΄Π° посочитС ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ β€ž-Wl, -Gβ€œ Π² ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ с Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π·Π° стартиранС Π½Π° Π»ΠΈΠ½ΠΊΠ΅Ρ€, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ β€žCMAKE_SHARED_LINKER_FLAGSβ€œ ΠΈ β€žCMAKE_MODULE_LINKER_FLAGSβ€œ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€