Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list

ПолноС руководство ΠΏΠΎ CMake. Π§Π°ΡΡ‚ΡŒ пСрвая: Бинтаксис

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

CMake β€” это ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΈ кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстирования, компиляции ΠΈ создания ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° C/C++. Написав ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ нСбольшой ΠΈ понятный всСм скрипт, Π’Ρ‹ Ρ‚Π΅ΠΌ самым обСспСчитС ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ сборку Π’Π°ΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Π»ΡŽΠ±Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π³Π΄Π΅ доступСн CMake.

Π―Π·Ρ‹ΠΊ CMake, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ транслированным Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» сборки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Makefile ΠΈΠ»ΠΈ Ninja), опрСдСляСт процСсс всСго управлСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. Π’ Π’Π°ΡˆΠ΅ΠΌ распоряТСнии, с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ стороны, Π΅ΡΡ‚ΡŒ лишь ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² довольно слоТныС конструкции. Π‘ Π½ΠΈΡ… ΠΌΡ‹ ΠΈ Π½Π°Ρ‡Π½Ρ‘ΠΌ.

Запуск CMake

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования языка CMake, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π’Π°ΠΌ слСдуСт ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ. ЭкспСримСнтируйтС с исходным ΠΊΠΎΠ΄ΠΎΠΌ, мСняя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ добавляя Π½ΠΎΠ²Ρ‹Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, установитС CMake с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π² CMake ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ функциям Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Ρ‘ имя, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΉ ΠΎΠ±Ρ€Π°ΠΌΠ»Ρ‘Π½Π½Ρ‹Π΅ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΎΡ‚Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ символами ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ message ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΡˆΠ΅ΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для Π²Ρ‹Π²ΠΎΠ΄Π° Π² консоль:

АргумСнты

АргумСнты, ΠΎΠ±Ρ€Π°ΠΌΠ»Ρ‘Π½Π½Ρ‹Π΅ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ экранированиС ΠΈ подстановку ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НСобрамлённыС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя символы ()#»\ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ для использования. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа Ρ€Π΅ΡˆΡ‘Ρ‚ΠΊΠΈ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ‚ΠΎΠΉ строки, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Ρ‹. ВСкст, Π·Π°ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΉ Π² коммСнтариях, игнорируСтся систСмой сборки ΠΈ Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ эффСкта Π½Π° Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹ΡˆΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ использованиС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠžΠΏΡ†ΠΈΠΈ

ЛогичСскиС выраТСния

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ цикличСских конструкций, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ логичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ЛогичСскиС выраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условий ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: ΠΏΡ€Π°Π²Π΄Π° ΠΈΠ»ΠΈ лоТь. НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 52 LESS 58 обратится Π² ΠΏΡ€Π°Π²Π΄Ρƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ 52 88 EQUAL 88 обратится Π² ΠΏΡ€Π°Π²Π΄Ρƒ, 63 GREATER 104 обратится Π² лоТь. Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа, Π½ΠΎ ΠΈ строки, вСрсии, Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊ списку ΠΈ рСгулярныС выраТСния. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список логичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚.

УсловныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

УсловныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² CMake Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² точности ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сработаСт лишь ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт, Ρ‡Ρ‚ΠΎ 5 > 1. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ условия Π»ΠΎΠΆΠ½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ 5 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΌΡƒ. Π‘Π»ΠΎΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ elseif ΠΈ else Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Π° endif ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π° ΠΈ сигнализируСт ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.

Π¦ΠΈΠΊΠ»Ρ‹

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ макросы

Бинтаксис CMake позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ собствСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² точности ΠΊΠ°ΠΊ встроСнныС. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ макросов: сначала ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ функция ΠΈ макрос со своими собствСнными ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, Π° ΠΏΡ€ΠΈ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Команда function ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ имя Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ β€” это ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²ΠΈΠ΄ΠΈΠΌΡ‹ лишь опрСдСляСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π½Π°Ρ‡ΠΈΡ‚ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступ ΠΊ Π΅Ρ‘ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, опрСдСляСмыС ΠΈ пСрСопрСдСляСмыС Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΈΠ΄Π½Ρ‹ лишь Π΅ΠΉ самой.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ функциям Π·Π° Ρ‚Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ собствСнной области видимости: всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ макросов Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ различиях макросов ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь.

Π Π°Π·Π±ΠΎΡ€ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Как ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π² коммСнтариях, ΠœΠΎΡ‰Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ cmake_parse_arguments позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Π±ΠΎΡ€ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ макрос.

Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ прСфикс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π±Π·Π°Ρ†), список ΠΎΠΏΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, список ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, послС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, список ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, послС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ мноТСства Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ список всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ макрос.

Π Π°Π±ΠΎΡ‚Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π°Π·Π±ΠΎΡ€Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, рассмотрСнная ΠΊΠΎΠΌΠ°Π½Π΄Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова опрСдСляСт ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²ΠΈΠ΄Π°

ΠžΠ±Π»Π°ΡΡ‚ΠΈ видимости

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π’Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ конструкции Π² CMake ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ собствСнныС области видимости. На самом Π΄Π΅Π»Π΅, всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ (доступ ΠΊ Π½ΠΈΠΌ Π΅ΡΡ‚ΡŒ Π²Π΅Π·Π΄Π΅), Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² функциях. Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ кэш-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… своя собствСнная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ часто.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

На этом синтаксис языка CMake заканчиваСтся. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρƒ Π΄Π½Π΅ΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² использованиС систСмы сборки CMake. Π”ΠΎ скорых встрСч!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Знакомство с CMake. Π§Π°ΡΡ‚ΡŒ 1. Установка, CMakeLists.txt, сборка.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅.

МногиС, ΠΊΡ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π» ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, пользовался ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ систСмой сборки. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, систСма сборки – это Π½Π°Π±ΠΎΡ€ инструмСнтов, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ с компилятором. Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΡƒ, установку, Π° Ρ‚Π°ΠΊΠΆΠ΅ сбор исходных Ρ„Π°ΠΉΠ»ΠΎΠ² для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΡ… компилятору ΠΈ слСТСниС Π·Π° зависимостями. Π’Π°ΠΊΠΆΠ΅ соврСмСнныС систСмы сборки ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ пСрСносимыС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΅Ρ‰Ρ‘ массу Π΄Ρ€ΡƒΠ³ΠΈΡ… вкусностСй. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ посвящСна популярной систСмС сборки CMake ΠΈ расскаТСт, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΅Ρ‘ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Ρ‘ использования. Она рассчитана Π½Π° Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠΎΠΌ с понятиями make, Makefile, компиляция, Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ°.

Установка Π² Linux.

Для популярных дистрибутивов Linux Ρ‚ΠΈΠΏΠ° Debian, Gentoo, Fedora ΠΈ Ρ‚.Π΄. CMake Π΄Π°Π²Π½ΠΎ Π»Π΅ΠΆΠΈΡ‚ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… рСпозиториях. Нам Π½ΡƒΠΆΠ½ΠΎ всСго лишь ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ cmake с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ устанавливаСтся Π² систСмныС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈ нСобходимости ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния Π½Π΅Ρ‚Ρƒ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ²

Если ΠΆΠ΅ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Unix/Linux Source, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, cmake-3.5.0-rc3.tar.gz, распаковываСм ΠΈ собираСм:

Установка Π² Windows.

Для Windows Π½Π° сайтС CMake Π»Π΅ΠΆΠΈΡ‚ установочный Ρ„Π°ΠΉΠ» msi. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΈ установкС ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π³Π°Π»ΠΎΡ‡ΠΊΡƒ добавлСния ΠΏΡƒΡ‚ΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния PATH для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ΠΎΠ³Π΄Π°, послС пСрСлогинивания, CMake Π±ΡƒΠ΄Π΅Ρ‚ доступСн ΠΈΠ· любого мСста. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡ‚ΠΊΡ€Ρ‹Π² cmd ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² Ρ‚ΠΎΡ‚ ΠΆΠ΅

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

CMake Tutorial

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ это ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

CMake β€” кроссплатформСнная автоматизированная систСма сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². НСпосрСдствСнно сборкой ΠΎΠ½Π° Π½Π΅ занимаСтся, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Makefile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ make.

CMake ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΡ…, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ компиляторами ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами. Π’.Π΅. Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΡƒΡ‡Π° ΠΊΠΎΠ΄Π° ΠΈ Ρ„Π°ΠΉΠ»ΠΈΠΊ, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для cmake, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ‚ΡŒ это Π΄Π΅Π»ΠΎ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ просто Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ cmake, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлаСт всё сам. Π£Π΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, просто.

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Если Π½Π΅Ρ‚ ТСлания/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ/сил Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ вСсь Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈ Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ QtCreator (ΠΈΠ»ΠΈ любая другая IDE, ΡƒΠΌΠ΅ΡŽΡ‰Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с cmake), Ρ‚ΠΎ:

ΠŸΡ€ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ рСкомСндуСтся всС-Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

Π‘Ρ‚Π°Ρ€Ρ‚ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ сам cmake Ρ‚Ρ‹, %username%, Π² состоянии. //Π° Ссли Π½Π΅Ρ‚?

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ Вас Π΅ΡΡ‚ΡŒ исходничСк «test.cpp» (// Π° Ссли Π½Π΅Ρ‚?)(А Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ CMake Ρ‚Π΅Π±Π΅ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ Ρ€Π°Π½ΠΎ). Для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΈΠΊ для cmake, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «CMakeLists.txt», ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° Π²ΠΎΡ‚ это:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запускаСм (ΠΈΠ· консоли) Π² этой ΠΏΠ°ΠΏΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «cmake CMakeLists.txt» (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ», Π½ΠΎ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π»Π΅ΠΆΠΈΡ‚, Ρ‚ΠΎΠ³Π΄Π° cmake Π½Π°ΠΉΠ΄Π΅Ρ‚ Π΅Π³ΠΎ сам).

А Ρƒ Вас Π² ΠΏΠ°ΠΏΠΎΡ‡ΠΊΠ΅ появится исполняСмый Ρ„Π°ΠΉΠ» «test». ЗапуститС, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ оТидаСтся ΠΎΡ‚ компиляции Ρ„Π°ΠΉΠ»Π° «test.cpp».

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΠΎΡ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΡΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ возмоТностями cmake.

Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ вСрсии cmake [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

НазваниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ этот cmake-Ρ„Π°ΠΉΠ» являСтся ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ связаны ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ cmake (Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ).

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π’ cmake ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ тСкстовыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Команда

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ΠΊΠΈΠΉ тСкст, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ кошС’Π³Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° со списком сорцов Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

УстанавливаСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ компилятору [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для установки Π΄Π΅Ρ„Π°ΠΉΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹e ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ Ρ‡Π΅Ρ€Π΅Π·, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, #ifdef SOME_IMPORTANT_DEFINITION.

ΠšΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚: «-std=c++11» Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² gcc ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ стандарта c++11, «-Wall» Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ gcc Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ всС прСдупрСТдСния (ΠΎΡ‡Π΅Π½ΡŒ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π³Π»ΡƒΠΏΡ‹Ρ… Π±Π°Π³ΠΎΠ² ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄).

Папка с Ρ…Π΅Π΄Π΅Ρ€Π°ΠΌΠΈ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Допустим, Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Π΅Π΄Π΅Ρ€Ρ‹ (Ρ„Π°ΠΉΠ»ΠΈΠΊΠΈ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· #include) искались Π΅Ρ‰Π΅ ΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… «headers/» ΠΈ «more_headers/»:

НадСюсь, ΠΈ это понятно.

Научимся ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ cmake Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Boost. Для Π½Π°Ρ‡Π°Π»Π° установим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для буста:

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ установили Ρ„Π»Π°Π³ΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ буст!

Допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ буста ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ chrono (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ) ΠΈ filesystem (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой):

Win, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈ ΠΈΡ… располоТСниС Π±ΡƒΠ΄Π΅Ρ‚ записано Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Boost_LIBRARIES.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с Ρ…Π΅Π΄Π΅Ρ€Π°ΠΌΠΈ буста для поиска Π² Π½ΠΈΡ… Ρ…Π΅Π΄Π΅Ρ€ΠΎΠ²:

Π˜Ρ‚Π°ΠΊ, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ.

Π’ качСствС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΠΈ ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ собранным Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ. cmake нашСл ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ записал Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ создан target сборки (Ρ‡Π΅Ρ€Π΅Π· add_executable).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ CMakeLists.txt ΠΈ Π³Π΄Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования всСго этого. Π£ нас Π΅ΡΡ‚ΡŒ нСкая дирСктория (ΠΎΡ‚Π½Ρ‹Π½Π΅ считаСм Π΅Π΅ «/sources»), ΠΈ Π² Π½Π΅ΠΉ Π»Π΅ΠΆΠ°Ρ‚ исходники

Π’ ΠΊΠΎΡ€Π½Π΅ «/» Π»Π΅ΠΆΠΈΡ‚ Ρ„Π°ΠΉΠ» «/CMakeLists.txt»:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΊΠΎΡ€Π½Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ:

ВсС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΎ, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΡΠ»ΠΈΠ½ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ с основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π² Ρ„Π°ΠΉΠ»Π°Ρ… основного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄Π΅Π»Π°Ρ‚ΡŒ #include «lib.h» (см. Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ target_include_directories).

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ CMake Π² связкС с QtCreator [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с cmake Ρƒ QtCreator Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ тСсная, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±Π΅Π· использования Qt, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ «ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Π‘++ с использованиСм CMake». Боздастся Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» сборки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто добавляСт всС исходники Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π² ΠΎΠ΄ΠΈΠ½ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ.

Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ header Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΈΠ΄Π½ΠΎ Π² спискС Ρ„Π°ΠΉΠ»ΠΎΠ² [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Если Π²Ρ‹ создали Ρ„Π°ΠΉΠ» header.h Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, просто строчку

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Записки программиста

ΠžΡΠ½ΠΎΠ²Ρ‹ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Π‘/C++ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ CMake

НСкотороС врСмя Π½Π°Π·Π°Π΄ ΠΌΡ‹ познакомились с Autotools. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Autotools Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… извСстных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, инструмСнт этот Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ особо ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² *nix систСмах, Π° Π² ΠΊΠ°ΠΊΠΎΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Windows ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Autotools, скаТСм Ρ‚Π°ΠΊ, вСсьма нСпросто. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Autotools β€” это лСгаси, ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ программисты Π² нашС врСмя ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ CMake ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SCons. Π’ этой Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ΅ ΠΌΡ‹ познакомимся с CMake.

Говоря простыми словами, CMake β€” это такая ΡˆΡ‚ΡƒΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ описываСтС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π° ΠΎΠ½Π° Π²Π°ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Makefile’ы Π² *nix систСмах, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Visual Studio ΠΏΠΎΠ΄ Windows, Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ IDE, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Sublime Text, Code::Blocks, Eclipse ΠΈΠ»ΠΈ KDevelop, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. НСсмотря Π½Π° спорный Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ… синтаксис, Π² послСднСС врСмя CMake становится стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ Π² ΠΌΠΈΡ€Π΅ C/C++. Π’ частности, CMake ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² LLVM, Qt, MariaDB, Blender, KiCad, GNU Radio ΠΈ рядС Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² CLion, IDE для C/C++ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ JetBrains, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, основанныС Π½Π° CMake.

ИспользованиС CMake Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ ΠΊΠΎΡ€Π½Π΅ рСпозитория создаСтся Ρ„Π°ΠΉΠ» CMakeLists.txt ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ содСрТания:

cmake_minimum_required ( VERSION 3.1 )

# Ρ‚Π°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

find_library ( PTHREAD_LIBRARY pthread )
find_library ( PCRE_LIBRARY pcre )

add_executable ( main src/Main.cpp src/HttpServer.cpp )

Π₯очСтся Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ, какая строчка здСсь Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, ΠΏΠΎΡΡΠ½ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π—Π°Ρ‚Π΅ΠΌ исходники ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ src, Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ β€” Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ include. Для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ:

ΠŸΡ€ΠΎΡΡ‚ΠΎ, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ?

Помимо ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ find_library Π² CMake Π΅ΡΡ‚ΡŒ ряд скриптов для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’ частности, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OpenGL осущСствляСтся ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

find_package ( OpenGL REQUIRED )

CMake ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Makefile’ов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅:

Π’ частности, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты для ускорСния сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ninja:

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈ Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠΉ сборкой осущСствляСтся Ρ‚Π°ΠΊ:

ВмСсто запуска Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ make ΠΈΠ»ΠΈ ninja ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

МоТно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ компилятор для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

… Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ компиляции:

Π’ ΠΌΠΈΡ€Π΅ C/C++ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ CMake, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ сабмодулСй Git. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ осущСствляСтся довольно просто:

cmake_minimum_required ( VERSION 2.8 )

include_directories ( deps/algorithms/include )
add_subdirectory ( deps/algorithms/src )

add_executable ( rbtree_example rbtree_example.c )
target_link_libraries ( rbtree_example CAlgorithms )

Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„Π°ΠΉΠ» src/CMakeList.txt Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ:

cmake_minimum_required ( VERSION 2.8 )

add_library ( CAlgorithms STATIC
struct/ilist.c
struct/rbtree.c
struct/htable.c
common/utils.c
)

Π’ΠΎΠΎΠ±Ρ‰Π΅, add_subdirectory ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ любого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» CMakeLists.txt. Π­Ρ‚ΠΎ позволяСт Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π΄Π°ΠΆΠ΅ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ рСпозитория. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π² случаС с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ это позволяСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ тСсты Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² сторонниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹.

НапримСр, Π² ΠΊΠΎΡ€Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ CMakeList.txt ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ:

cmake_minimum_required ( VERSION 2.8 )

add_subdirectory ( src )
add_subdirectory ( test )

НСпосрСдствСнно тСсты Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

cmake_minimum_required ( VERSION 2.8 )

add_executable ( test_htable test_htable.c )
target_link_libraries ( test_htable CAlgorithms )

add_executable ( test_rbtree test_rbtree.c )
target_link_libraries ( test_rbtree CAlgorithms )

add_test ( test_htable «./test_htable» )
add_test ( test_rbtree «./test_rbtree» )

Запуск тСстов осущСствляСтся простой ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ build. Если вас интСрСсуСт Ρ‚Π΅ΠΌΠ° написания ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстов Π½Π° C++, ΠΎΠ½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ раскрыта Π² Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ΅ ВСстированиС ΠΊΠΎΠ΄Π° Π½Π° C++ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Google Test.

Если ΠΆΠ΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ PyTest, просто Π΄ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅ Π² CMakeList.txt Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

find_package ( PythonInterp REQUIRED )

Π’Ρ‹Π²ΠΎΠ΄ тСстов ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ» Testing/Temporary/LastTest.log. ΠšΡΡ‚Π°Ρ‚ΠΈ, подробности ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния, доступных Π² CMake, Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ CMAKE_SOURCE_DIR, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

Помимо рассмотрСнных Π²Ρ‹ΡˆΠ΅ возмоТностСй часто ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ опциями. Π’ частности, это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Assimp ΠΈ LLDB. ΠŸΡ€ΠΈ сборкС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΠΏΡ†ΠΈΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ:

ΠžΠΏΡ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π² ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ Ρ‡Π΅Ρ€Π΅Π· curses-интСрфСйс:

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ поста, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ прСдставляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС возмоТности CMake. Однако прСдставлСнной Π²Ρ‹ΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π² 90% случаСв. ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования CMake Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² этом, этом, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² этом рСпозиториях Π½Π° GitHub. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΎΠΏΡ†ΠΈΠΉ ΠΈ условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² рСпозиториях ΡƒΠΆΠ΅ упомянутых Assimp ΠΈ LLDB. Ну ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, массу ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС CMake.

А ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Π»ΠΈ Π²Ρ‹ CMake ΠΈ Ссли Π΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΅Π³ΠΎ возмоТности, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Π±Ρ‹Π»ΠΎ рассказано Π²Ρ‹ΡˆΠ΅?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ПолноС руководство ΠΏΠΎ CMake. Π§Π°ΡΡ‚ΡŒ вторая: БистСма сборки

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cmake list

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрСно использованиС систСмы сборки CMake, примСняСмой Π² колоссальном количСствС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° C/C++. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ рСкомСндуСтся ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ руководства Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ нСпонимания синтаксиса языка CMake, явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π° протяТСнии всСй ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Запуск CMake

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования языка CMake, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π’Π°ΠΌ слСдуСт ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ. ЭкспСримСнтируйтС с исходным ΠΊΠΎΠ΄ΠΎΠΌ, мСняя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ добавляя Π½ΠΎΠ²Ρ‹Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, установитС CMake с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

БистСма сборки CMake прСдставляСт ΠΈΠ· сСбя ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ зависимыми ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ninja ΠΈΠ»ΠΈ Make). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² самом процСссС сборки, ΠΊΠ°ΠΊ Π±Ρ‹ ΠΏΠ°Ρ€Π°Π΄ΠΎΠΊΡΠ°Π»ΡŒΠ½ΠΎ это Π½ΠΈ Π·Π²ΡƒΡ‡Π°Π»ΠΎ, ΠΎΠ½Π° нСпосрСдствСнного участия Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚.

БистСма сборки CMake ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Ρ„Π°ΠΉΠ» CMakeLists.txt с описаниСм ΠΏΡ€Π°Π²ΠΈΠ» сборки Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ языкС CMake, Π° Π·Π°Ρ‚Π΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ сборки Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, принятых Π½Π° Π’Π°ΡˆΠ΅ΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅.

Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ названия систСмных ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ компиляторов, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ CMake ΠΎΡ€ΡƒΠ΄ΡƒΡŽΡ‚ лишь абстрактным понятиСм компилятора ΠΈ Π½Π΅ привязаны ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ зависимым инструмСнтам, сильно Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° вСрсии CMake

Команда cmake_minimum_required провСряСт Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ CMake: Ссли ΠΎΠ½Π° мСньшС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°, Ρ‚ΠΎ CMake Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ошибкой. ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ использованиС Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Π½Π°Ρ‡Π°Π»Π΅ любого CMake-Ρ„Π°ΠΉΠ»Π°:

Как ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π² коммСнтариях, ΠΊΠΎΠΌΠ°Π½Π΄Π° cmake_minimum_required выставляСт всС Ρ„Π»Π°Π³ΠΈ совмСстимости (ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ cmake_policy ). НСкоторыС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½ΠΈΠ·ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ CMake, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π­Ρ‚ΠΎ позволяСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π΅Π²Π½ΠΈΠ΅ вСрсии CMake ΠΈ мСстами ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ возмоТности.

ΠžΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’ Π½Π°Ρ‡Π°Π»Π΅ любого CMakeLists.txt слСдуСт Π·Π°Π΄Π°Ρ‚ΡŒ характСристики ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ project для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ оформлСния ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ срСдами ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΌΠΈ инструмСнтами Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Запуск скриптовых Ρ„Π°ΠΉΠ»ΠΎΠ²

Команда include замСняСт строку своСго Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, дСйствуя Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ прСпроцСссорной ΠΊΠΎΠΌΠ°Π½Π΄Π΅ include языков C/C++. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ запускаСт скриптовый Ρ„Π°ΠΉΠ» MyCMakeScript.cmake описанной ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ исходников ΠΊ Ρ†Π΅Π»ΠΈ

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ target_sources Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΊ Ρ†Π΅Π»ΠΈ Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹, поэтому Π½ΠΈΠΆΠ½ΠΈΠ΅ Π΄Π²Π° Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ эквивалСнтными:

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ «DLL-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ» ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ всС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, основанныС Π½Π° Windows, Π² Ρ‚ΠΎΠΌ числС ΠΈ Cygwin.

Компоновка с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ с исполняСмыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°ΠΌΠΈ выполнСния.

Π Π°Π±ΠΎΡ‚Π° с цСлями

Как упомянули Π² коммСнтариях, Ρ†Π΅Π»ΠΈ Π² CMake Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ Ρ€ΡƒΡ‡Π½ΠΎΠΌΡƒ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ вСсьма ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌΡƒ.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния свойствами Ρ†Π΅Π»Π΅ΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для задания процСсса сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Команда get_target_property присваиваСт прСдоставлСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства Ρ†Π΅Π»ΠΈ. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства C_STANDARD Ρ†Π΅Π»ΠΈ MyTarget Π½Π° экран:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ Π·Π°Π΄Π°Π» Ρ†Π΅Π»ΠΈ MyTarget свойства, Π²Π»ΠΈΡΡŽΡ‰ΠΈΠ΅ Π½Π° процСсс компиляции, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΠΏΡ€ΠΈ компиляции Ρ†Π΅Π»ΠΈ MyTarget CMake Π·Π°Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ компилятора ΠΎ использовании стандарта C11. ВсС извСстныС имСнования свойств Ρ†Π΅Π»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π½Π° этой страницС.

Π’Π°ΠΊΠΆΠ΅ имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции if(TARGET ) :

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

Команда add_subdirectory ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ CMake ΠΊ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ дСмонстрируСт ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ описанного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°:

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ области видимости ΡƒΠ½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ, Π° всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄ΠΈΠΌΡ‹ лишь Π΅ΠΌΡƒ (Ссли ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово PARENT_SCOPE Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ set ). Π”Π°Π½Π½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ упомянули Π² коммСнтариях ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Поиск ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Команда find_package Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ настройки внСшнСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ½Π° примСняСтся для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Boost ΠΈ GSL. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для поиска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ GSL ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ:

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, ΠΊΠΎΠΌΠ°Π½Π΄Π° find_package ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ разновидности запуска: ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΡƒΡŽ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ примСнял ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ CMake ΠΈΡ‰Π΅Ρ‚ скриптовый Ρ„Π°ΠΉΠ» Π²ΠΈΠ΄Π° Find

Бпособы Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²

Команда target_include_directories влияСт лишь Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ†Π΅Π»ΡŒ, Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ†Π΅Π»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ воздСйствия Π½Π΅ оказываСтся. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ дСмонстрируСт Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ:

Установка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Команда install Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ установочныС ΠΏΡ€Π°Π²ΠΈΠ»Π° для Π’Π°ΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° способна Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с цСлями, Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Π‘ΠΏΠ΅Ρ€Π²Π° рассмотрим установку Ρ†Π΅Π»Π΅ΠΉ.

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ CMake всСх Π’Π°ΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ установку всСх описанных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ sudo checkinstall (Ссли CMake Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Makefile ), ΠΈΠ»ΠΈ ΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ΅ дСйствиС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ CMake.

Наглядный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π”Π°Π½Π½ΠΎΠ΅ руководство Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π±Π΅Π· дСмонстрации Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° использования систСмы сборки CMake. Рассмотрим схСму простого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ CMake Π² качСствС СдинствСнной систСмы сборки:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π’Ρ‹ способны ΠΏΠΈΡΠ°Ρ‚ΡŒ свои ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‡ΡƒΠΆΠΈΠ΅ CMake-Ρ„Π°ΠΉΠ»Ρ‹, Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства Π±ΡƒΠ΄Π΅Ρ‚ посвящСна Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ созданию ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CMake ΠΈ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· нСдСлю. Π”ΠΎ скорых встрСч!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *