@@pavelkarplyuk9873 Доброго дня. Як підключати конкретні бібліотеки можна дивитися в документації на цю бібліотеку, або readme файли. А цей відос націлений на отримання знань про cmake, як він працює, як створити свою лібу і тд.
google ну почему ты мне это показываешь, именно сейчас!? Буквально месяц назад, я потерял несколько сотен тысяч нервных клеток и отрастил пару седых волос пытаясь самостоятельно изучить настройку проекта под cmake. И когда он уверенно, самостоятельно передвигается на костылях, ты мне, только сейчас, показываешь этот превосходный урок.
Очень информативно, но что то я не могу повторить пятый пример, не создается папка 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>
Какой забавный тролль :) Попробуйте сначала почитать, хотя бы на stackoverflow, зачем ввели понятие "абстрактной машины" в C++, а потом запустить код, _скомпилированный_ для одной машины, на _другой_ машине, прежде чем писать про "наглую ложь". Тем более, что лектор прямо сказал - попробуйте бинарник, собранный для винды, запустить под линукс. "Эта концепция используется для абстрагирования внутренней работы физических машин", чтобы не вводить понятия "регистр, кэш, стек, куча" и не объяснять поведение программ на уровне конкретных машинных инструкций - stackoverflow. Когда человек что-то не понял, сомневается и у него есть вопросы - одно дело, это я могу понять. Но *начинать предложение* с фразы "наглая ложь", когда нихрена не разобрался - это верх троллинга. Тогда я вашу фразу назову *сверхнаглейшей гиперложью", поскольку: 1) C++ не выполняется. Выполняются программы. 2) В стандарте хотя и введено понятие абстрактной машины, но *нигде не написано, что программы **_выполняются_** на абстрактной машине* . Написано лишь, что конкретная программа, скомпилированная на _конкретной реализации_ стандарта, должна иметь такое же наблюдаемое поведение, как "если бы" запускалась на абстрактной машине. 3) А ещё стандарт вводит понятие "реализации" и конкретные реализации стандарта вполне могут быть несовместимы между собой.
@УниКод какой неленивый человек. Мне вот лень отвечать на что-то столь длинное, но из некоего уважения за затраченные усилия, пожалуй, отвечу. Хотя зачем же было тратить эти усилия на тролля? :) Почитав ответы на stackoverflow, боюсь, вы многое упустили, не поняв сути. Во-первых, моё утверждение было к словам "С++ не кроссплатформенный", а не к бинарникам. Во-вторых... Представьте себе, кроссплатформенность на уровне стандарта != бинарная кроссплатформенность. Стандарт - это API, бинарная совместимость ABI, про которую стандарт ничего не знает. И что утверждает стандарт, так это то, что программа, которая выполняет его требования, будет исполняться одинаково на любой корректной реализации абстрактной машины. Боюсь, вам бы тоже стоило сначала разобраться, прежде чем называть что-то троллингом :) То же самое насчёт ваших утверждений про исполнение программы. Я мог бы признать, что моё утверждение содержало некоторую неточность... Если бы ваши утверждения были корректными. По сути, часть стандарта об абстрактной машине говорит о том, что мы можем воспринимать машину, являющуюся корректной реализацией обозначенной стандартом абстрактной машины, как машину, машинным языком которой является С++. И моё утверждение в таком контексте является более чем корректным. Это вот именно про то самое "наблюдаемое поведение как если бы программа исполнялась на абстрактной машине". Насчёт же последнего, боюсь, ваша фраза тоже требует уточнения, иначе получается некая чушь. Conforming implementations не могут быть несовместимы между собой. Они будут выполнять одинаково такой же код на С++, пока он выполняет требования стандарта. Что они делают когда требования стандарта не исполняются нас уже не волнует. Если же вас волнуют аспекты бинарной совместимости, всё ещё сочувствую, но стандарт не об этом.
Спасибо за ваши труды! Отличный материал для начала изучения 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
Добрый день. В этом видео говориться о том как подключать внешние библиотеки вроде GTK+?
@@pavelkarplyuk9873 Доброго дня. Як підключати конкретні бібліотеки можна дивитися в документації на цю бібліотеку, або readme файли. А цей відос націлений на отримання знань про cmake, як він працює, як створити свою лібу і тд.
@@МихайлоФедоров-ъ9л Благодарю.
google ну почему ты мне это показываешь, именно сейчас!? Буквально месяц назад, я потерял несколько сотен тысяч нервных клеток и отрастил пару седых волос пытаясь самостоятельно изучить настройку проекта под cmake. И когда он уверенно, самостоятельно передвигается на костылях, ты мне, только сейчас, показываешь этот превосходный урок.
Благодарю за отличный материал ! Успехов вам !
Спасибо огромное!! Смотрел раньше, теперь вновь вернулся для уточнения деталей...
Очень понятно, подробно и с юмором. Смотреть интересно и весело! Спасибо за урок!
Спасибо! Очень информативно! Все по делу, хороший темп и скорость подачи материала и кнопкоклацания!
Великолепный вебинар!
клёвая подача, было не скучно смотреть
Шикарное объяснение! Спасибо большое!
Интересная лекция. Спасибо
очешуенная понятная лекция спасибо!
Мне понравилось!
Спасибо!
вот я сейчас пытаюсь подружить Cmake с ninja и Conan'ом + vcpkg на gcc и по виндой, есть кто делал что-то подобное?
Очень информативно, но что то я не могу повторить пятый пример, не создается папка 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>
Отличное объяснение, можно ссылку на код примеров
49:28
сначала пишешь программу на одном языке программирования, потом ее компилируешь на другом языке программирования :))))
Буржуи? Серьезно? 21 век уже. Откуда такая дремучесть у айтишника?
Привет
17:38
Наглая ложь. Стандарт прямо утверждает, что С++ выполняется на абстрактной машине -> кросплатформенный.
Какой забавный тролль :) Попробуйте сначала почитать, хотя бы на stackoverflow, зачем ввели понятие "абстрактной машины" в C++, а потом запустить код, _скомпилированный_ для одной машины, на _другой_ машине, прежде чем писать про "наглую ложь". Тем более, что лектор прямо сказал - попробуйте бинарник, собранный для винды, запустить под линукс.
"Эта концепция используется для абстрагирования внутренней работы физических машин", чтобы не вводить понятия "регистр, кэш, стек, куча" и не объяснять поведение программ на уровне конкретных машинных инструкций - stackoverflow.
Когда человек что-то не понял, сомневается и у него есть вопросы - одно дело, это я могу понять. Но *начинать предложение* с фразы "наглая ложь", когда нихрена не разобрался - это верх троллинга.
Тогда я вашу фразу назову *сверхнаглейшей гиперложью", поскольку:
1) C++ не выполняется. Выполняются программы.
2) В стандарте хотя и введено понятие абстрактной машины, но *нигде не написано, что программы **_выполняются_** на абстрактной машине* . Написано лишь, что конкретная программа, скомпилированная на _конкретной реализации_ стандарта, должна иметь такое же наблюдаемое поведение, как "если бы" запускалась на абстрактной машине.
3) А ещё стандарт вводит понятие "реализации" и конкретные реализации стандарта вполне могут быть несовместимы между собой.
@УниКод какой неленивый человек. Мне вот лень отвечать на что-то столь длинное, но из некоего уважения за затраченные усилия, пожалуй, отвечу. Хотя зачем же было тратить эти усилия на тролля? :) Почитав ответы на stackoverflow, боюсь, вы многое упустили, не поняв сути. Во-первых, моё утверждение было к словам "С++ не кроссплатформенный", а не к бинарникам. Во-вторых... Представьте себе, кроссплатформенность на уровне стандарта != бинарная кроссплатформенность. Стандарт - это API, бинарная совместимость ABI, про которую стандарт ничего не знает. И что утверждает стандарт, так это то, что программа, которая выполняет его требования, будет исполняться одинаково на любой корректной реализации абстрактной машины. Боюсь, вам бы тоже стоило сначала разобраться, прежде чем называть что-то троллингом :)
То же самое насчёт ваших утверждений про исполнение программы. Я мог бы признать, что моё утверждение содержало некоторую неточность... Если бы ваши утверждения были корректными. По сути, часть стандарта об абстрактной машине говорит о том, что мы можем воспринимать машину, являющуюся корректной реализацией обозначенной стандартом абстрактной машины, как машину, машинным языком которой является С++. И моё утверждение в таком контексте является более чем корректным. Это вот именно про то самое "наблюдаемое поведение как если бы программа исполнялась на абстрактной машине". Насчёт же последнего, боюсь, ваша фраза тоже требует уточнения, иначе получается некая чушь. Conforming implementations не могут быть несовместимы между собой. Они будут выполнять одинаково такой же код на С++, пока он выполняет требования стандарта. Что они делают когда требования стандарта не исполняются нас уже не волнует. Если же вас волнуют аспекты бинарной совместимости, всё ещё сочувствую, но стандарт не об этом.
а можно было без этих пустых 10 минут вначале?