Сборка проектов на C++ с использованием CMake // Демо-занятие курса «C++ Developer. Professional»

  Рет қаралды 37,093

OTUS Онлайн - образование

OTUS Онлайн - образование

5 жыл бұрын

Учимся собирать проекты с использованием кроcсплатформенной утилиты для автоматической сборки программы из исходного кода.
Рассматриваем особенности работы с CMake и обсуждаем плюсы и минусы такого инструмента.
Полученные знания пригодятся при выполнении домашних работ курса «Разработчик C++» и не только.
Преподаватель: Сергей Кольцов - Senior Developer С++ VisionLabs
Подключайтесь к обсуждению в чате - otus.pw/shm9/
Пройдите опрос по итогам мероприятия - otus.pw/m0rI/
Учитесь у профессионалов - otus.pw/IuoR/
Следите за новостями проекта:
- Facebook: otus.pw/3hO2
- Telegram: t.me/Otusjava
- ВКонтакте: otus.pw/850t
- LinkedIn: otus.pw/yQwQ/
- Хабр: otus.pw/S0nM/

Пікірлер: 31
@denissavast
@denissavast Ай бұрын
Благодарю за отличный материал ! Успехов вам !
@user-tb1jt9eo5q
@user-tb1jt9eo5q 4 жыл бұрын
Спасибо за ваши труды! Отличный материал для начала изучения cmake. Все на одном дыхании, без монтажа и почти без ошибок. Смотрел 2 раза, на второй раз решил сделать оглавление, вдруг что забуду. Думаю полезно будет для всех, кто будет смотреть 2:02 Начало про OTUS 5:31 Начало презентации 8:27 Осторожно, звук :) 10:13 Вступление про CMake 41:54 example1 42:52 cmake_minimum_required(VERSION 3.5) 44:39 project(Example1) 45:44 add_executable(helloWorld main.cpp) 46:30 set_target_properties(...) 49:18 cli> cmake .. 51:28 cli> cmake .. -G "MinGW Makefiles" 52:58 cli> cmake --build . 54:39 Generators 56:40 example2 59:03 set(...) #обьявление переменных 1:04:31 example3 1:06:08 project(Example3 VERSION 0.0.1) #версия проекта 1:06:56 config.h.in #шаблоны cmake 1:07:46 #cmakedefine @PROJECT_VERSION_PATCH@ 1:08:45 configure_file(config.h.in ...) 1:10:11 target_include_directories(...) 1:16:06 example4 1:16:51 add_subdirectory(dir_name) 1:17:26 add_library(lib_name STATIC src_files) #создание библиотеки 1:21:36 target_link_libraries(target lib_name) 1:25:12 example5 1:26:50 install(TARGETS ...) 1:29:09 cli> cmake .. -DCMAKE_INSTALL_PREFIX 1:30:36 cli> cmake --build . --target install 1:33:02 find_package(...) 1:38:21 install(EXPORT ...) 1:39:39 cli> cmake .. -DsumLib_DIR=/path/to/cmake/export/sumLibConfig.cmake 1:41:47 example6 1:42:53 Custom FindsumLib.cmake 1:49:00 cli> cmake .. -DSUMLIB_ROOT=/path/to/custom/cmake/module/FindsumLib.cmake 1:50:33 message("...") 1:53:08 example7 1:53:17 option(OPTION_VARIABLE "description" initial_value) 1:53:56 if(OPTION_VARIABLE) 1:54:20 cli> cmake .. -DOPTION_VARIABLE=new_state 1:56:14 example8 1:56:31 target_compile_features(target PRIVATE cxx_generic_lambdas) 1:58:19 Q&A
@pavelkarplyuk9873
@pavelkarplyuk9873 Жыл бұрын
Добрый день. В этом видео говориться о том как подключать внешние библиотеки вроде GTK+?
@user-tb1jt9eo5q
@user-tb1jt9eo5q Жыл бұрын
@@pavelkarplyuk9873 Доброго дня. Як підключати конкретні бібліотеки можна дивитися в документації на цю бібліотеку, або readme файли. А цей відос націлений на отримання знань про cmake, як він працює, як створити свою лібу і тд.
@pavelkarplyuk9873
@pavelkarplyuk9873 Жыл бұрын
@@user-tb1jt9eo5q Благодарю.
@MrHazur
@MrHazur 2 жыл бұрын
google ну почему ты мне это показываешь, именно сейчас!? Буквально месяц назад, я потерял несколько сотен тысяч нервных клеток и отрастил пару седых волос пытаясь самостоятельно изучить настройку проекта под cmake. И когда он уверенно, самостоятельно передвигается на костылях, ты мне, только сейчас, показываешь этот превосходный урок.
@user-xz8ck2sw4e
@user-xz8ck2sw4e 2 жыл бұрын
Очень понятно, подробно и с юмором. Смотреть интересно и весело! Спасибо за урок!
@IT-no1wi
@IT-no1wi 5 жыл бұрын
Великолепный вебинар!
@cast2super
@cast2super 5 жыл бұрын
Спасибо! Очень информативно! Все по делу, хороший темп и скорость подачи материала и кнопкоклацания!
@Scherbakov
@Scherbakov 2 жыл бұрын
Спасибо огромное!! Смотрел раньше, теперь вновь вернулся для уточнения деталей...
@Dolbatehnik
@Dolbatehnik 2 жыл бұрын
Шикарное объяснение! Спасибо большое!
@vyorkin
@vyorkin 4 жыл бұрын
клёвая подача, было не скучно смотреть
@user-ok9cf4dc8o
@user-ok9cf4dc8o 2 жыл бұрын
Интересная лекция. Спасибо
@lamero74
@lamero74 5 жыл бұрын
Мне понравилось!
@yunushkin88
@yunushkin88 2 ай бұрын
очешуенная понятная лекция спасибо!
@babichfx
@babichfx 3 жыл бұрын
Спасибо!
@user-xn8iw5to1o
@user-xn8iw5to1o 4 жыл бұрын
Отличное объяснение, можно ссылку на код примеров
@user-ox7qz8wv3r
@user-ox7qz8wv3r 2 жыл бұрын
Очень информативно, но что то я не могу повторить пятый пример, не создается папка install, правда я делаю по MinGW, но все равно же это не должно иметь значение? Друзья подскажите , что я делаю не так? Содержимое папки D:\a_school\CMake\Vebinar\New_dir\example5\sumLib 16.08.2021 20:38 . 16.08.2021 20:38 .. 16.08.2021 21:48 build 14.06.2019 22:46 730 CMakeLists.txt 14.06.2019 22:46 66 config.h.in 14.06.2019 22:46 260 sumLib.cpp 14.06.2019 22:46 86 sumLib.h 4 файлов 1 142 байт 3 папок 148 725 764 096 байт свободно D:\a_school\CMake\Vebinar\New_dir\example5\sumLib>cd build D:\a_school\CMake\Vebinar\New_dir\example5\sumLib\build>dir Том в устройстве D имеет метку Новый том Серийный номер тома: 5AAF-8390 Содержимое папки D:\a_school\CMake\Vebinar\New_dir\example5\sumLib\build 16.08.2021 21:48 . 16.08.2021 21:48 .. 0 файлов 0 байт 2 папок 148 725 764 096 байт свободно D:\a_school\CMake\Vebinar\New_dir\example5\sumLib\build>cmake -G "MinGW Makefiles" .. -DCMAKE_INSTALL_PREFIX=INSTALL -- The C compiler identification is GNU 9.2.0 -- The CXX compiler identification is GNU 9.2.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/TDM-GCC-64/bin/gcc.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/TDM-GCC-64/bin/g++.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: D:/a_school/CMake/Vebinar/New_dir/example5/sumLib/build D:\a_school\CMake\Vebinar\New_dir\example5\sumLib\build>cmake -G "MinGW Makefiles" --build . -- Configuring done -- Generating done -- Build files have been written to: D:/a_school/CMake/Vebinar/New_dir/example5/sumLib/build D:\a_school\CMake\Vebinar\New_dir\example5\sumLib\build>cmake -G "MinGW Makefiles" --build . --target install CMake Error: The source directory "D:/a_school/CMake/Vebinar/New_dir/example5/sumLib/build/install" does not exist. Specify --help for usage, or press the help button on the CMake GUI. D:\a_school\CMake\Vebinar\New_dir\example5\sumLib\build>
@fatoldhikki4837
@fatoldhikki4837 21 күн бұрын
вот я сейчас пытаюсь подружить Cmake с ninja и Conan'ом + vcpkg на gcc и по виндой, есть кто делал что-то подобное?
@user-bb2fd5ru5b
@user-bb2fd5ru5b 3 жыл бұрын
49:28
@serious_psychologist
@serious_psychologist 8 ай бұрын
сначала пишешь программу на одном языке программирования, потом ее компилируешь на другом языке программирования :))))
@user-gn8um6yk5p
@user-gn8um6yk5p 3 жыл бұрын
Привет
@maxpo801
@maxpo801 2 жыл бұрын
Буржуи? Серьезно? 21 век уже. Откуда такая дремучесть у айтишника?
@elkadaf
@elkadaf 3 жыл бұрын
17:38 Наглая ложь. Стандарт прямо утверждает, что С++ выполняется на абстрактной машине -> кросплатформенный.
@Uni-Coder
@Uni-Coder 3 жыл бұрын
Какой забавный тролль :) Попробуйте сначала почитать, хотя бы на stackoverflow, зачем ввели понятие "абстрактной машины" в C++, а потом запустить код, _скомпилированный_ для одной машины, на _другой_ машине, прежде чем писать про "наглую ложь". Тем более, что лектор прямо сказал - попробуйте бинарник, собранный для винды, запустить под линукс. "Эта концепция используется для абстрагирования внутренней работы физических машин", чтобы не вводить понятия "регистр, кэш, стек, куча" и не объяснять поведение программ на уровне конкретных машинных инструкций - stackoverflow. Когда человек что-то не понял, сомневается и у него есть вопросы - одно дело, это я могу понять. Но *начинать предложение* с фразы "наглая ложь", когда нихрена не разобрался - это верх троллинга. Тогда я вашу фразу назову *сверхнаглейшей гиперложью", поскольку: 1) C++ не выполняется. Выполняются программы. 2) В стандарте хотя и введено понятие абстрактной машины, но *нигде не написано, что программы **_выполняются_** на абстрактной машине* . Написано лишь, что конкретная программа, скомпилированная на _конкретной реализации_ стандарта, должна иметь такое же наблюдаемое поведение, как "если бы" запускалась на абстрактной машине. 3) А ещё стандарт вводит понятие "реализации" и конкретные реализации стандарта вполне могут быть несовместимы между собой.
@elkadaf
@elkadaf 3 жыл бұрын
@УниКод какой неленивый человек. Мне вот лень отвечать на что-то столь длинное, но из некоего уважения за затраченные усилия, пожалуй, отвечу. Хотя зачем же было тратить эти усилия на тролля? :) Почитав ответы на stackoverflow, боюсь, вы многое упустили, не поняв сути. Во-первых, моё утверждение было к словам "С++ не кроссплатформенный", а не к бинарникам. Во-вторых... Представьте себе, кроссплатформенность на уровне стандарта != бинарная кроссплатформенность. Стандарт - это API, бинарная совместимость ABI, про которую стандарт ничего не знает. И что утверждает стандарт, так это то, что программа, которая выполняет его требования, будет исполняться одинаково на любой корректной реализации абстрактной машины. Боюсь, вам бы тоже стоило сначала разобраться, прежде чем называть что-то троллингом :) То же самое насчёт ваших утверждений про исполнение программы. Я мог бы признать, что моё утверждение содержало некоторую неточность... Если бы ваши утверждения были корректными. По сути, часть стандарта об абстрактной машине говорит о том, что мы можем воспринимать машину, являющуюся корректной реализацией обозначенной стандартом абстрактной машины, как машину, машинным языком которой является С++. И моё утверждение в таком контексте является более чем корректным. Это вот именно про то самое "наблюдаемое поведение как если бы программа исполнялась на абстрактной машине". Насчёт же последнего, боюсь, ваша фраза тоже требует уточнения, иначе получается некая чушь. Conforming implementations не могут быть несовместимы между собой. Они будут выполнять одинаково такой же код на С++, пока он выполняет требования стандарта. Что они делают когда требования стандарта не исполняются нас уже не волнует. Если же вас волнуют аспекты бинарной совместимости, всё ещё сочувствую, но стандарт не об этом.
@andrewlatyshev904
@andrewlatyshev904 Жыл бұрын
а можно было без этих пустых 10 минут вначале?
A pack of chips with a surprise 🤣😍❤️ #demariki
00:14
Demariki
Рет қаралды 53 МЛН
Вечный ДВИГАТЕЛЬ!⚙️ #shorts
00:27
Гараж 54
Рет қаралды 3,8 МЛН
Sprinting with More and More Money
00:29
MrBeast
Рет қаралды 192 МЛН
How I wrote online shooter on C++ in a week
25:31
Vectozavr
Рет қаралды 1 МЛН
Знакомство с Greenplum // Демо-занятие курса «Data Engineer»‎
1:35:37
OTUS Онлайн - образование
Рет қаралды 9 М.
ты C++ РАЗРАБОТЧИК?) ага
12:04
Winderton
Рет қаралды 227 М.
Creating C++ DLL and using it in C#
26:09
Shmuel Yaish
Рет қаралды 30 М.
YOTAPHONE 2 - СПУСТЯ 10 ЛЕТ
15:13
ЗЕ МАККЕРС
Рет қаралды 86 М.
Introduction to Conan 2 - The Best C++ Package Manager?
26:33
Coding with Mat
Рет қаралды 8 М.