Форум программистов, компьютерный форум, киберфорум
C/C++: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/55: Рейтинг темы: голосов - 55, средняя оценка - 4.53
18 / 8 / 4
Регистрация: 26.01.2014
Сообщений: 164
1

Как работает CMake?

17.09.2015, 22:57. Показов 10987. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вы мне можете объяснить, чем занимается CMake конкретно на пальцах?

Получается, допустим, у нас есть папка с исходными файлами .cpp, мы можем выбрать конфигурацию, настроить для какой платформы будем компилить исходники, и т.о. мы можем скомпилить проект под Linux, Windows, MacOS и другие платформы как это делает Qt?

По сути содержит пути до компиляторов и просто выполняет .bat файл с надстройками, как что и где компилить?
Спрашиваю потому что сейчас пытаюсь установить библиотеку libTorrent, для нее нужно иметь установленные OpenSSL и Boost.

До этого имел опыт работы с CMake, когда делал проект с использованием OpenCV. Ее тоже нужно было собирать, но вместе с исходниками шли Prebuilt Binaries, заранее скомпиленные.

Другими словами, какое именно назначение у CMake? Можно ли пользоваться ей для простой компиляции своего исходника без IDE,
И является ли это кроссплатформенным решением
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2015, 22:57
Ответы с готовыми решениями:

Сборка проекта cmake с вложенными cmake
Всем привет. Подскажите пожалуйста вот у меня есть проектный файл и в нем мне надо как то обьявить...

[CLion] настройка дебагера на Windows 10. Не работает дебаг с профилем Visual Studio или CMake с профилем MinGW
Сделал скриншоты с настройками. Как это дело настроить? На Mac OS поставил, всё работает из...

Как в CMake сделать окна нового вида
Собственно вопрос в заголовке. В VS 2017, там всё просто: подключаешь файл манифеста и всё - у...

Cmake как добавить папку с файлами(.хейдеры и .спп)
Добрый день Пользую CLion. Скопировал папку с Box2D в свой проект и не знаю как его добавить в...

23
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.09.2015, 23:22 2
Цитата Сообщение от igor_petrov Посмотреть сообщение
Получается, допустим, у нас есть папка с исходными файлами .cpp, мы можем выбрать конфигурацию, настроить для какой платформы будем компилить исходники, и т.о. мы можем скомпилить проект под Linux, Windows, MacOS и другие платформы как это делает Qt?
да.

Цитата Сообщение от igor_petrov Посмотреть сообщение
По сути содержит пути до компиляторов и просто выполняет .bat файл с надстройками, как что и где компилить?
не совсем бат, но смысл примерно такой и есть.

Цитата Сообщение от igor_petrov Посмотреть сообщение
Другими словами, какое именно назначение у CMake?
независимость ни от платформы,
ни от файлов проекта целевой ИДЕ.

например, на работе стоит линукс, а разработка в qtCreator
а дома - виндовс, и студия.

у этих ИДЕ разные файлы проекта,
разные настройки.
разные компиляторы.

что бы поработать в студии над проектом,
который изначально писался в qtcreator
мне пришлось бы потратить уйму времени
на создание и настройку файлов проекта для студии.

но так как сценарий сборки был на cmake,
то это уже не является проблемой.

я просто обновляю рабочую копию из репозитория.
и прошу cmake сгенерировать мне проект для нужной мне ИДЕ.
и спокойно работаю.

Цитата Сообщение от igor_petrov Посмотреть сообщение
Можно ли пользоваться ей для простой компиляции своего исходника без IDE
да

Цитата Сообщение от igor_petrov Посмотреть сообщение
И является ли это кроссплатформенным решением
да
4
18 / 8 / 4
Регистрация: 26.01.2014
Сообщений: 164
17.09.2015, 23:37  [ТС] 3
все понятно, спасибо за разъяснения

но у меня остались еще пару вопросов.
мне немного непонятно, в силу своей неопытности, как это работает

если я пишу на WinApi, разрабатываю в Windows7 x64, у меня есть .cpp и .h файлы,
я открываю CMake, прописываю настройки и пр., но хочу получить, например исполняемый файл или дрова для Linux, как происходит трансформация между функциями WinApi и функциями для линуксовых осей? Там же все это учтено? и все тоже самое для MacOS? я просто поверить не могу, что так все просто
например, некоторые функции специфичны только для своих операционок. и библиотеки бывают только на винду, например. DirectX? не смогу успокоиться, пока это не пойму, спасибо
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.09.2015, 23:45 4
Лучший ответ Сообщение было отмечено igor_petrov как решение

Решение

Цитата Сообщение от igor_petrov Посмотреть сообщение
если я пишу на WinApi, разрабатываю в Windows7 x64, у меня есть .cpp и .h файлы,
я открываю CMake, прописываю настройки и пр., но хочу получить, например исполняемый файл или дрова для Linux, как происходит трансформация между функциями WinApi и функциями для линуксовых осей? Там же все это учтено? и все тоже самое для MacOS? я просто поверить не могу, что так все просто
хех... вы не поняли.
cmake - кросплатформенной средство построения файлов проектов для целевых ИДЕ,
либо сборки продукта из исходников.

но cmake за вас исходный код писать не будет.
и если ваш исходный код не кросс-платформа сам по себе,
то естественно под чужерожной платформой это не взлетит.

то есть, если вы использовали винапи,
значит прибили свой проект гвоздями к виндовс.


под виндовс вы сможете попросить cmake
собрать проект руками компиляторов вижал студии, или mingw

вы сможете получать файлы проекта для вижал студии, или работать в qtcreator

но поскольку винапи - то о линуксах уже речи не будет.

cmake сможет сгенерировать вам мэйк файл проекта для сборки линуксовым gcc
это не проблема.
просто линуксовый gcc пошлет нафиг ваше винапи.
3
18 / 8 / 4
Регистрация: 26.01.2014
Сообщений: 164
17.09.2015, 23:51  [ТС] 5
теперь все встало на свои места, спасибо за помощь!
0
Заблокирован
18.09.2015, 13:42 6
Цитата Сообщение от hoggy Посмотреть сообщение
и прошу cmake сгенерировать мне проект для нужной мне ИДЕ.
CMake сможет из MakeFile-а сгенерить файл солюшена VisualStudio ?
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
18.09.2015, 13:46 7
Цитата Сообщение от MotionMaster Посмотреть сообщение
CMake сможет из MakeFile-а сгенерить файл солюшена VisualStudio ?
CMake может из описания сборки сгенерировать проект VisualStudio.
Makefile - это тоже целевой файл. В смысле
CMake может из описания сборки сгенерировать Makefile
CMake может из описания сборки сгенерировать проект VisualStudio.
CMake может из описания сборки сгенерировать проект CodeBlocks.
и т.д.
2
Заблокирован
18.09.2015, 14:55 8
DrOffset, слушай, где - только не искал какого - то автоматического способа перегонки проекта на MakeFile в проект VisualStudio, ни где нет, если только вручную... Может подкинешь линк на утилитку или на док с инфой?
P.S.: на codeproject валяется какой - то левый скрипт, которые ни хрена не работает.
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
18.09.2015, 15:53 9
Цитата Сообщение от MotionMaster Посмотреть сообщение
автоматического способа перегонки проекта на MakeFile в проект VisualStudio
Я таких не знаю.
Да и VS в работе не использую, т.к. под win не программирую.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.09.2015, 19:35 10
Цитата Сообщение от MotionMaster Посмотреть сообщение
CMake сможет из MakeFile-а сгенерить файл солюшена VisualStudio ?
нет.
он может построить целевой файл проекта.
на основании собственного сценария сборки:
CMakeLists.txt
*.cmake

но он не занимается конвертацией уже существующих файлов проекта.

Цитата Сообщение от MotionMaster Посмотреть сообщение
P.S.: на codeproject валяется какой - то левый скрипт, которые ни хрена не работает.
оно?
http://www.codeproject.com/Tip... plus-Proje

гляньте ещё сюда:
https://msdn.microsoft.com/en-... s.60).aspx


и сюда:
http://www.bordoon.com/cpluspl... ration.pdf
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
23.09.2015, 21:08 11
Цитата Сообщение от hoggy Посмотреть сообщение
я просто обновляю рабочую копию из репозитория.
и прошу cmake сгенерировать мне проект для нужной мне ИДЕ.
и спокойно работаю.
Скачал из репозитория библиотеку для виндовс версию и там пишут что нужно использовать CMake чтобы построить примеры, а как использовать CMake?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
23.09.2015, 21:15 12
Цитата Сообщение от ninja2 Посмотреть сообщение
а как использовать CMake?
делаем директорию для билда, заходим в нее, выполняем там
Код
cmake путь_к_исходникам_с_CMakeLists.txt
затем make или что-там у Вас...

Добавлено через 56 секунд
Можете скачать cmake-gui, для удобства
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.09.2015, 22:21 13
Цитата Сообщение от ninja2 Посмотреть сообщение
а как использовать CMake?
обычно, с библиотекой идут файлы документации,
где описывается, как собирать библиотеку.

вам лишь нужно запустить cmake, скормив ему нужные параметры.

пример батника для запуска из командной строки:
Код
echo [ LAUNCH CMAKE ] ...

set COMMANDLINE=cmake -H"%SOURCE_DIRECTORY%" -B"%PATH_BUILD%" -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%BUILD_TYPE%  

if not "%TOOLSET%"=="" (
    set COMMANDLINE=%COMMANDLINE% -T"%TOOLSET%"
)

::@echo [COMMAND] %COMMANDLINE%

set PATH=%PATH_CMAKE%;%PATH%
%COMMANDLINE%

exit /b
здесь:

SOURCE_DIRECTORY - путь к файлу CMakeLists.txt

PATH_BUILD - путь к каталогу, в котором будет созданы файлы проекта целевой ИДЕ.
например, в этом каталоге cmake может создать проект вижал студии

GENERATOR - определяет что именно за файлы проекта хотим получить.
например, Visual Studio 14 - означает, что нужны файлы проекта для 2015 вижал студии

-DCMAKE_BUILD_TYPE=%BUILD_TYPE%
позволяет установить стартовые значения некоторых переменных.
в данном случае, переменная CMAKE_BUILD_TYPE отвечает за конфигурацию
(Debug/Release/etc)

Код
if not "%TOOLSET%"=="" (
    set COMMANDLINE=%COMMANDLINE% -T"%TOOLSET%"
)
-T"имя-тулчейна" позволяет указать тулчейн, которым нужно осуществлять сборку.
например, для вижал студии можно указать
CTP_Nov2013 - экспериментальный компилятор 2013 студии с улучшенной поддержкой разных фич c++1y
v120_xp - компилятор с поддержкой windows xp
ну и тп, их там множество может быть самых разных.

в общем, вам нужно почитать документацию к вашей библиотеке,
понять какие могут быть параметры сборки.
и запустить cmake указав эти параметры.

так же, вы можете воспользоваться cmakeGUI,
и в удобном гуевом интерфейсе прописать все необходимые параметры.
тогда вам не придется вводить их из командной строки.
2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
23.09.2015, 22:32 14
та там с ГУИ идет, два пути указываешь путь к исходнику и путь out и запускаешь, появляются файлы решения и файлы проектов для студии. Открываю sln файл компилиру проект с примером и ошибки вылазять. Что то не то ))
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.09.2015, 22:36 15
Цитата Сообщение от ninja2 Посмотреть сообщение
та там с ГУИ идет, два пути указываешь путь к исходнику и путь out и запускаешь, появляются файлы решения и файлы проектов для студии. Открываю sln файл компилиру проект с примером и ошибки вылазять. Что то не то ))
да это нормально.
сборка чужих библиотек часто выливается в какие то приседания,
и танцы с бубном.

скиньте линк на библиотеку.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
23.09.2015, 22:55 16
Цитата Сообщение от hoggy Посмотреть сообщение
скиньте линк на библиотеку.
https://cefbuilds.com/ , самая последняя для win32

Добавлено через 11 минут
Ошибка вылазит и таких много
(182): error C2220: предупреждение обработано как ошибка - файл "object" не создан

Добавлено через 53 секунды
1>C:\Users\neo\Downloads\cef_binary_3.2494.1321.ge343da7_windows32(1)\cef_binary _3.2494.1321.ge343da7_windows32\include/base/cef_thread_collision_warner.h(182): error C2220: предупреждение обработано как ошибка - файл "object" не создан
1>C:\Users\neo\Downloads\cef_binary_3.2494.1321.ge343da7_windows32(1)\cef_binary _3.2494.1321.ge343da7_windows32\include/base/cef_thread_collision_warner.h(182): warning C4481: использовано нестандартное расширение: спецификатор переопределения "override"
1>C:\Users\neo\Downloads\cef_binary_3.2494.1321.ge343da7_windows32(1)\cef_binary _3.2494.1321.ge343da7_windows32\include/base/cef_thread_collision_warner.h(182): error C2220: предупреждение обработано как ошибка - файл "object" не создан
1>C:\Users\neo\Downloads\cef_binary_3.2494.1321.ge343da7_windows32(1)\cef_binary _3.2494.1321.ge343da7_windows32\include/base/cef_thread_collision_warner.h(182): warning C4481: использовано нестандартное расширение: спецификатор переопределения "override"
1>C:\Users\neo\Downloads\cef_binary_3.2494.1321.ge343da7_windows32(1)\cef_binary _3.2494.1321.ge343da7_windows32\include/base/internal/cef_bind_internal.h(2557): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "final"
1>


И таких много
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.09.2015, 23:39 17
Цитата Сообщение от ninja2 Посмотреть сообщение
https://cefbuilds.com/ , самая последняя для win32
собрал 32 битный релиз в 2013 вижал студии.

но что характерно - ни ошибок,
ни даже предупреждений.
неужели, в кои то веки, кто-то оформил цивильную сборку?

инструкция:

1.
скачиваем:
Windows 32bit
2015-09-08
CEF 3.2494.1321.ge343da7 (76MB)
по ссылке:
https://cefbuilds.com/

2.
распаковываем архив.
я распаковал в каталог по имени cef:
D:/dev/workspace/deploy/cef
вы можете распаковать по любому другому пути.

3.
в корень проекта закидываем батник
по имени launchcmake.bat:

его путь у меня получился:
D:\dev\workspace\deploy\cef\launchcmake.bat

4.
батник содержит скрипт:

Код
@echo off
cls

rem --- стартовые параметры

set PATH_CMAKE=C:\Program Files\CMake\bin

set NAME_PRODUCT=cef
set PATH_BUILD=%~dp0_build
set SOURCE_DIRECTORY=%~dp0
set GENERATOR=Visual Studio 12
set BUILD_TYPE=Release
set ADDRESSMODEL=32
set ACTION=build

set SOURCE_DIRECTORY=%SOURCE_DIRECTORY:~0,-1%

set PATH=%PATH_CMAKE%;%PATH%

if "%ADDRESSMODEL%"=="64" (
    set GENERATOR=%GENERATOR% Win64
)

call :view

echo [ LAUNCH CMAKE ] ...

set COMMANDLINE=cmake -H"%SOURCE_DIRECTORY%" -B"%PATH_BUILD%" -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%BUILD_TYPE%  

if not "%TOOLSET%"=="" (
    set COMMANDLINE=%COMMANDLINE% -T"%TOOLSET%"
)

@echo [COMMAND] %COMMANDLINE%
%COMMANDLINE%

exit /b

rem --------------------------------------------------------------
rem --------------------------------------------------------------
rem --------------------------------------------------------------

:view
    echo PROJECT NAME ......... %NAME_PRODUCT%
    echo BUILD DIRECTORY ...... %PATH_BUILD%
    echo SOURCE DIRECTORY ..... %SOURCE_DIRECTORY%
    echo IDE .................. %GENERATOR%
    echo TOOLSET .............. %TOOLSET%
    echo BUILD TYPE ........... %BUILD_TYPE%
    echo ADDRESS MODEL ........ %ADDRESSMODEL%
    echo ACTION ............... %ACTION%
exit /b

rem --------------------------------------------------------------
rem --------------------------------------------------------------
rem --------------------------------------------------------------
здесь,
Код
set BUILD_TYPE=Release
set ADDRESSMODEL=32
BUILD_TYPE отвечает за тип конфигурации (Debug/Relese)

ADDRESSMODEL определяет адресную модель:
32 или 64 битная сборка.

в комплекте со сборкой идут предкомпилированные библиотеки.
поэтому есть четкое разделение на 32 и 64 битную сборку.

данный архив не поддерживает 64 сборку,
поэтому выставлять 64 не имеет смысла.

но если скачаете 64 архив,
тогда этот же батник сможет настроить вам сборку для 64 битных продуктов

5.
заходим в каталог с проектом, и запускаем батник.
я работаю в FAR`e, и просто жмакаю enter на батничек

через пару-тройку секунд у вас появиться подкаталог _build
который будет содержать файлы проекта для 2013 вижал студии.

6.
заходим в подкаталог _build
и жмакаем enter на cef.sln

запустится вижал студия,
с уже открытым солюшеном.
в нем будет 5 проектов:

ALL_BUILD //<--- симейковская ботва
cefclient
cefsimple
libcef_dll_wrapper
ZERO_CHECK //<--- симейковская ботва

7.
поскольку в батнике мы указали,
что хотим Release,
то в студии переключаем конфигурацию сборки на Release
(по умолчанию студия всегда показывает Debug при запуске).

8.
нажимаем на клавишу f7

9.
наливаем чайку.
компилять будет минуты 3 не меньше.

10.
PROFFIT!!!!

Добавлено через 14 минут
Цитата Сообщение от ninja2 Посмотреть сообщение
1>C:\Users\neo\Downloads\cef_binary_3.2494.1321.ge343da7_windows32(1)\cef_binary _3.2494.1321.ge343da7_windows32\include/base/internal/cef_bind_internal.h(2557): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "final"
такое впечатление, что у вас компилятор старый.
не держит с++11.

а вообще из документации к сборке:

# - Windows requirements:
# Visual Studio 2010 or newer building on Windows XP SP3 or newer. 64-bit
# version of Windows 7 or newer recommended.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.09.2015, 00:53 18
Цитата Сообщение от hoggy Посмотреть сообщение
такое впечатление, что у вас компилятор старый.
не держит с++11.
а хз. может и не поддерживает, у меня visual studio 2010 крякнутая старая. А мб. ее можно как то обновить?

А у тебя 13 крякнутая?

Щас VS 2013 крякнутую скача мб. и у меня заработает.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.09.2015, 00:56 19
Цитата Сообщение от ninja2 Посмотреть сообщение
А мб. ее можно как то обновить?
наверное можно.
но я не пробовал.


есть идея получше:
https://www.visualstudio.com/r... io-vs.aspx

2015 комьюнити
только в батнике нужно будет заменить:
Код
set GENERATOR=Visual Studio 12
на
Код
set GENERATOR=Visual Studio 14

Цитата Сообщение от ninja2 Посмотреть сообщение
А у тебя 13 крякнутая?
лицензионная
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.09.2015, 01:57 20
Цитата Сообщение от hoggy Посмотреть сообщение
2015 комьюнити
Это типо на халяву вместо экспресс? А там и MFC есть, в экспресс не было? Или там все есть только программы комерческие нельзя создавать?

Мб. пора windows7 сменить на windows10 ???? У меня 48 гигабайт на диске С, ни на что не хватает места. От подумываю переустанавливать и 100 выделить. Какую виндовс лучше выбрать, чтобы ресурсов не больше семерки жрала или 7 норм?
0
24.09.2015, 01:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2015, 01:57
Помогаю со студенческими работами здесь

Как OpenSSL добавить в линковку CLion (используется cmake и mingw)
Приветствую, друзья. Как добавить OpenSSL в линковку проекта? Я видел FingOpenSSL (cmake), но...

Cmake + gtest
Добрый день, имеется проект, который со временем будет допиливаться. Имеет он следующую структуру:...

CMake лист
Что такое CMAke лист, в чём его назначение и как с ним работать7

Cmake does not exist
Уже очень долгое время не могу найти информацию по данной ошибке, английский немного знаю, читать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru