CMake считывает файлы сценария и генерирует входные файлы для системы сборки той платформы, на которой он запущен. Он может создавать GNU Makefiles, файлы проекта KDevelop , файлы проекта XCode и файлы проекты Visual Studio.
CMake — это свободное программное обеспечение, выпущенное под лицензией, подобной BSD. CMake разработана Kitware Inc.
Здесь приведены несколько интересных ссылок, где вы можете найти информацию о CMake:
Также вы можете присоединиться к CMake mailing list.
CMake — это официальный инструмент для выпуска KDE 4, решение использовать который было принято в марте 2006, главным образом из-за технических преимуществ по сравнению с более старыми инструментами KDE: automake и unsermake.
Загрузите последнюю стабильную версию CMake с [1].
Разархивируйте и скомпилируйте CMake:
$ mkdir cmake-build $ cd cmake-build $ ../bootstrap $ make $ make install
По умолчанию CMake будет установлен в /usr/local, поэтому убедитесь, что путь /usr/local/bin есть в переменной окружения PATH. Чтобы изменить путь для установки (например сделать /usr для debian), добавьте '--prefix=PATH' к команде bootstrap.
Следуйте этим инструкциям, если хотите использовать текущую разрабатываемую версию.
Загрузите последнюю стабильную версию CMake с [2].
Запустите инсталлятор CMake.
По умолчанию CMake будет установлен в C:\Program Files\CMake 2.4, поэтому убедитесь, что <installpath>\bin находиться в вашей переменной окружения.
Пожалуйста, следуйте инструкциям, которые находятся здесь, если вы хотите использовать текущую разрабатываемую версию.
CMake генерирует файлы описывающие правила сборки в формате системного инструментария.
Если у вас kdelibs/ в папке ~/src/kdelibs/, вам необходимо сделать следующее:
$ ls ~/src/kdelibs/ $ mkdir kdelibs-build $ cd kdelibs-build $ cmake ../kdelibs
Этот код сгенерирует файлы Makefile для сборки kdelibs/ в kdelibs-build/.
Если у вас kdelibs\ in c:\src\kdelibs\, вам необходимо сделать следующее:
c:\daten\kde4> cd kdelibs\win c:\daten\kde4> cmake c:\daten\kde4> make c:\daten\kde4> make install c:\daten\kde4> cd .. c:\daten\kde4> mkdir kdelibs-build c:\daten\kde4> cd kdelibs-build c:\daten\kde4\kdelibs-build> cmake ..\kdelibs
Этот код сгенерирует файлы Makefile для сборки kdelibs\ в kdelibs-build\. Также см.[Projects/KDE_on_Windows|KDE в Windows]].
Если вы предпочитайте файлы проекта KDevelop (файлы Makefile и некоторые дополнительные файлы для KDevelop):
$ cmake ../kdelibs -GKDevelop3
Используйте 'cmake -h', чтобы узнать, какие генераторы CMake поддерживаются.
Чтобы определить местонахождение Qt 4, CMake ищет qmake в переменной окружения PATH. CMake не использует переменную окружения QTDIR.
Когда CMake завершает работу, он создает файл CMakeCache.txt. Этот файл содержит все данные собранные о вашей системе. Если вы хотите запустить CMake с другим генератором или хотите, чтобы CMake определил всё заново, удалите этот файл.
Если CMake не находит что-либо, но вы знайте, что это что-то у вас установлено, можно вручную сказать CMake, где это следует искать. CMake использует переменные для хранения этой информации. Эти переменные могут кешироваться в уже упомянутом CMakeCache.txt. Есть три способа задать эти переменные вручную:
Вам следует запустить ccmake ../kdelibs по крайней мере один раз, чтобы получить представление, какие переменные использует CMake. Нажмите T, чтобы увидеть также «продвинутые» переменные. Так, если CMake не находит что-либо, запустите ccmake и установите это вручную.
Вы можете установить некоторые параметры через аргументы командной строки:
Если у вас есть заголовочные файлы и библиотеки, установленные в нестандартные директории, которые cmake не может найти (например fink на Mac OSX установлена в /sw), тогда вам необходимо установить следующие переменные окружения (несмотря на похожие соглашения о наименовании, они не будут работать как аргументы командной строки cmake):
Более подробную информацию о переменных окружения смотрите на this cmake.org wiki page
Если cmake завершается с сообщением "Generating done", тогда ошибок не обнаружено, но если он завершается с сообщением "Configuring done", тогда обнаружены ошибки и вам необходимо их исправить. Когда cmake завершится успешно, запустится ваша система сборки (например make, KDevelop, XCode или MSVC) и соберет ваше приложение.
Если cmake завершился неудачно, вы увидите что-то вроде этого:
CMake Error: This project requires some variables to be set, and cmake can not find them. Please set the following variables: X11_XTest_LIB (ADVANCED)
Это означает, что у вас не найдена требуемая библиотека (или другая зависимость). Для того, чтобы понять, какая библиотека не найдена, найдите в каталоге cmake/modules переменную, которую сmake не может найти. Например
FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})В данном случае не найдена библиотека Xtst. Вам необходимо найти её (возможно установив libXtst-devel) и перезапустить cmake.
Здесь самый простой пример CMakeLists.txt
add_executable(hello main.cpp)
Этот файл создает выполняемый код, который называется "hello" (или "hello.exe" в Windows) из файла исходного текста main.cpp. Вы можете смешивать файлы C и C++ так как вам хочется. Вы можете иметь много исполняемых файлов и библиотек в одном CMakeLists.txt. Один и тот же файл исходного текст может быть использован для нескольких целей или может быть скомпилирован для каждой цели отдельно. Возможно, самая главная часть языка cmake — это переменные:
SET( MY_SOURCES main.cpp widget.cpp)
MESSAGE(STATUS "my sources: ${MY_SOURCES}")Используйте команду SET(), чтобы установить значение переменной. Если вы составляйте список более чем из одной строки, переменная может быть списком. Список — это список строк, разделенных точкой с запятой. Если вы установили только один элемент, вам необходимо только значение. Для получение значения переменной используйте ${VAR}. Вы можете совершать операции над списком, используя FOREACH():
FOREACH(next_ITEM ${MY_SOURCES})
MESSAGE(STATUS "next item: ${next_ITEM}")
ENDFOREACH(next_ITEM ${MY_SOURCES})Команды CMake не чувствительны к регистру. Имена переменных и параметров чувствительны к регистру.
Вы можете проверять различные условия:
IF (UNIX)
MESSAGE(STATUS "This is UNIX (including OS X and CygWin)")
ENDIF (UNIX)
В этом примере вы можете увидеть, как добавлять элементы в список:
IF (MSVC)
SET(MY_SRCS ${MY_SRCS} winextra.cpp)
ENDIF (MSVC)In the cmake Wiki there is also a tutorial on using cmake to build KDE 4 software. It is recommended reading.
Здесь приведен файл CmakeList, который собрирает маленький проект KDE 4:
PROJECT(kde4project)
FIND_PACKAGE(KDE4 REQUIRED)
INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} )
SET(KDE4ProjectSources kde4mainapp.cpp someclass.cpp someotherclass.cpp)
KDE4_ADD_EXECUTABLE(kde4project ${KDE4ProjectSources} )
TARGET_LINK_LIBRARIES(kde4project ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS} )Переменные, макросы и другую полезную информацию, относящуюся к KD можно найти на странице Development/CMake/Addons for KDE.
CMake может быть расширен использованием скриптов cmake. CMake поставляется с некоторым количеством скриптов; в UNIX они по умолчанию устанавливаются в /usr/local/share/CMake/Modules/. Библиотеки KDE также устанавливаются с набором модулей cmake в share/apps/cmake/modules/. The files located there will be preferred over the ones in the system global cmake module path. Для определения программных пакетов существуют файлы FindFOO.cmake. Более подробно об этом смотрите здесь. Вы также можете писать макросы в CMake. Они достаточно мощные, чтобы делать всё что вам нужно для сборки приложения, но они не предназначены для того, чтобы использоваться как язык программирования общего назначения.
В kdesdk/cmake/ вы можете найти скрипт am2cmake . Это скрипт на языке Ruby, поэтому необходимо чтобы Ruby был установлен. Запустите am2cmake в корневой директории дерева исходных кодов:
$ cd src/mykooltool/ $ am2cmake --kde4
Не забудьте переключатель --kde4, в противном случае вы не получите файлов, подходящих для сборки приложений для KDE 4. Преобразованные файлы могут работать сразу, но сложные проекты требует некоторого дополнительного редактирования.
Вы можете также:
Прочитайте раздел CMake Wiki CMake Editors Support. В нем описывается, как настроить Emacs (XEmacs тоже работает), VIM, Kate, KWrite и KDevelop.
Используйте ADD_CUSTOM_COMMAND(). Это объясняется в CMake wiki: How can I generate a source file during the build
Предположим, что исполняемый файл называется genembed. В этом случае используйте KDE4_ADD_EXECUTABLE(foo RUN_UNINSTALLED ${fooSources}) для того, чтобы создать исполняемый файл. Параметр RUN_UNINSTALLED нужен для того, чтобы исполняемый файл запускать из каталога, в котором он был собран и связывать его с библиотеками, которые находятся в каталоге сборки. Чтобы достичь этого, исполняемый файл компилируется с установленной соответствующим образом RPATH и скрипт, названный как исполняемый файл, но имеющий расширение ".sh". Скрипт устанавливает LD_LIBRARY_PATH и вызывает существующий исполняемый файл. Использование этого скрипта в ADD_CUSTOM_COMMAND() описано ниже. Вы можете получить его имя и расположение запросом свойства WRAPPER_SCRIPT. Здесь дан полный пример, взяты из kdelibs/kstyles/keramik/ :
# собрать исполняемый файл
KDE4_ADD_EXECUTABLE(genembed RUN_UNINSTALLED ${genembed_SRCS})
# получит имя сгенерированного
get the name of the generated wrapper script (which sets up LD_LIBRARY_PATH)
GET_TARGET_PROPERTY(GENEMBED_EXECUTABLE genembed WRAPPER_SCRIPT)
# and the custom command
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/keramikrc.h
COMMAND ${GENEMBED_EXECUTABLE} --file ${CMAKE_CURRENT_BINARY_DIR}/keramikPics.txt > \
${CMAKE_CURRENT_BINARY_DIR}/pixmaps.keramik
DEPENDS genembed ${keramikPics}
)Как видите, genembed здесь обозначен как зависимость. Это значит, что cmake должен собрать genembed перед тем, как использовать это правило.
Нет. $KDEDIR устарела в KDE 4.
A: Если у вас старая версия Qt4 в директории qt/lib, вы должны удалить старые (4.0.1) файлы.
Передайте переменную VERBOSE в make, то есть
% make VERBOSE=1
или
% VERBOSE=1 make
Более подробную информацию можно найти на CMake wiki: Is there an option to produce more 'verbose' compiling?
Удалите директорию, в которой было собрано приложение или просто удалите её содержимое.