Это может быть трудно понять, как работает CMake. Я сделаю все возможное, чтобы кратко ответить на некоторые из ваших вопросов.
Почему cmake генерирует make-файлы вместо того, чтобы просто строить проект?
CMake is cross-platform make system и является независимым от компилятора. Он не генерирует только создание систем сборки, а также создает файлы решений Visual Studio. В том же файле CMakeList.txt кто-то может легко создать сборку Windows (Visual Studio) или сборку Linux (g ++).
Почему CMake файлы [ряд] команды, а не только файлы конфигурации, например: INI/XML/YAML
Составители не используют универсальную конфигурацию, поэтому CMake должен адаптироваться к цели компилятор.
Файлы CMake представляют собой серию команд для создания соответствующей конфигурации для целевого компилятора.
Каковы команды, которые я пишу в CMakeLists.txt? Просто вызвать компилятор будет слишком легко. Я думаю,
Предполагается создать соответствующую конфигурацию для целевого компилятора, и они будут, если они будут правильно записаны.
В каком порядке я должен выполнять команды?
В порядке, который имеет значение, если заказ имеет значение вообще. Да, это смутный ответ, но это зависит от проекта. Например, команда include() будет использоваться для добавления дополнительных файлов cmake, и если вы включите их в неправильном порядке, это может сломать генерацию системы сборки.
Первая команда в вашем файле cmake должна быть минимально необходимой версией с последней версией CMake (3.0.1). Оттуда это зависит.:)
Например, эта команда не будет работать с версиями CMake меньше 2.6. cmake_minimum_required (VERSION 2.6)
См. Некоторые ссылки на учебники в конце этого ответа.
Все ли нечувствительно к регистру? Могу ли я написать все в нижнем регистре?
Как указано на CMake вики language syntax page, все команды нечувствительны к регистру, но вы должны рассмотреть случай за содержание переданных команде.
Почему учебники советуют мне перечислять каждый исходный файл явно?
Потому что вы должны явно указать каждый исходный файл. Это можно сделать в файле cmake или в отдельном списке файлов, на который ссылается файл cmake. Обратитесь к Антонио answer за предостережение от использования отдельного списка файлов.
CMake делает обеспечить commandaux_source_directory
, который собирает имена всех исходных файлов в указанном каталоге и сохраняет список в переменной, но оно должно быть использовано только для «порожденных» исходных файлов по той же причине, указанной в Антонио answer.
Как создать свой CMakeLists.txt, чтобы он был коротким и простым в обслуживании. Каждый файл, который я искал в реальных проектах, выглядел очень загроможденным.
Очень легко загромождать файл CMake, и один из способов помочь с этим - использовать файлы .cmake, которые вы ссылаетесь, используя команду include.
Хороший ресурс (хотя еще находится в стадии разработки) можно найти на CMake about page.
Он разбит на несколько разделов:
- Overview
- Статистика (в стадии разработки)
- Participants
- Documentation
- License
- Success Stories
- Publications
- News
Учебники
CMake Tutorial - Из официальной CMake странице документации
Getting Started With CMake - учебник, который использует CMake с GCC.
Using CMake To Build QT Projects - Учебник, в котором используется CMake с QT.
большое спасибо за информацию. Но это все еще неясно: какова конфигурация, которую должен создать файл? Я знаю, что это «все зависит от того, чего вы хотите». Но я всегда смущен, чтобы помочь себе здесь. Документация, которую вы здесь указали, является ссылкой, что именно я не ищу, потому что она предполагает, что я уже понял общую цель. – Arne
@ Арне, если вы хотите получить конкретный ответ на конкретный вопрос, я предлагаю вам создать новый вопрос с этими деталями. Трудно быть конкретным без этих деталей. – jmstoker
Я думал, что мой вопрос был конкретным, чтобы просить подробный учебник. Вопросы были лишь некоторыми примерами, а не всеми моими проблемами. Это просто не так, чтобы начать изучать CMake, написав 20 вопросов переполнения стека. Поэтому я думал, что пропущу что-то, что все знают, кроме меня, что мне нужно читать. – Arne