Чтобы добавлять сообщения и комментарии, .

@waterlaz:
waterlaz

Хочу, чтобы все мои сорцы были в ./src/
Потратил в гугле минут 20, так и не понял, как это сделать. Как, блеать, этим говном вообще пользуются?

@waterlaz:
waterlaz

Оказывается, если у меня несколько бинарников, у которых есть общие объектные файлы, то cmake собирает для каждого бинарника свой объектный файл. Насколько я понял, исправить это нельзя и это говно называется фичей.
Пришло время грохнуть все это к ебеням и запилить свой Makefile.

@muhas:
muhas

Стрелочные часы н cmake habrahabr.ru

Не пасьянс на bc и не тетрис на sed, так что впечатления уже не те, но всё-равно клёво!

@borman:
borman

Это форменный пиздец: cmake.org
Совершенно дикое число нетривиальных шагов, чтобы добиться результата. Не должно быть столько магии в этом месте.

@Shchvova:
Shchvova

я клевый. Зафигачил проектик с C++ и Луа которий сам качает луа и все строит. gist.github.com

@hatred:
hatred

Обновлениние моего плагинчика CMakePluginManager2: htrd.su

@Shchvova:
Shchvova

общим. Я вообще чувствую что это не то что делает CMake, но хотелось бы сделать следующую ерунду. Есть такой вот цмейк github.com он делает бинарник в какой-то папке, все делает папочки и конфигурацию. Общим, он делает бинарник который ложит в папочку out результаты работы. Хочется что бы в генерируемом цмейк мейке был таргет, который запустит бинарник, потом пойдет в папочку out и положит туда out.html с содержимым <img src="%TGA%" /> где %TGA% каждый из сгенерированных файлов...

@Shchvova:
Shchvova

какое уебищное поделие же это :( сирсли, люди.

@syjgin:
syjgin

В общем, на последнем QtCreator'e убедился, что он всё-таки никакая не С++-IDE, а Qt-IDE(кто бы мог подумать:). Потому что подключить не входящую в состав Qt либу(в моём случае — SDL2 и всё, необходимое для работы функций из glcorearb.h) средствами qmake не получится. В случае cmake под виндой на minGW-шном генераторе возвращал ошибку(хотя через cmake-gui всё билдилось), а майкрософтовский вообще не видел. Похоже, надо будет ставить codeBlocks, если уж так хочется на обоих системах использовать что-то одно

@hatred:
hatred

с третьим тегом первотегу вкупе со второтегом совсем печально, точнее — вообще никак. Первотег — 3.0 из гита.

@Equidamoid:
Equidamoid

Сабж как-то тоже разочаровывать начинает.
Надо собрать проект с Magick++, установленным в префикс.
В этом самом префиксе есть скриптик Magick++-config, который выдаёт все необходимые пути. Не сразу, конечно, выдаёт, а после того, как, прочитав его, установишь переменную PKG_CONFIG_DIR, но это уже детали.
Изначально в проекте используется штатный модуль FindImageMagick. cmake ../src; ccmake ../src. Хрен там был. EXECUTABLE_DIR правильный, а путь и названия либ — от тех, что через apt-get поставлены.
Смотрю в код модуля (ух уж и упоротый там язык!), а там используется просто find_library, который и знать не знает ни о каком pgk-config & Magick++-config, а смотрит просто в /usr/lib и ко.
Ладно, пробую модуль, работающий напрямую с pkg-config:
pkg_check_modules(MAGICKPP "Magick++")и, барабанная дробь... получаю чудесную ошибку:
if given arguments:
"NOT" "DEFINED" "__pkg_config_checked_MAGICKPP" "OR" "__pkg_config_checked_MAGICKPP" "LESS" "OR" "NOT" "MAGICKPP_FOUND"
Unknown arguments specified
В коде после OR стоит переменная PKG_CONFIG_VERSION, которой в самом начале присваивают значение 1, а потом пытаются затолкать страшное значение 0.26 (вывод pkg-config --version)

Вот хоть на scons какой переходи, ей-богу.

@O01eg:
O01eg

Вот как?
$ ls -1 ../CMakeModules/
FindCal3d.cmake
...
$ cmake ..
CMake Error at CMakeLists.txt:79 (FIND_PACKAGE):
By not providing "FindCal3d.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Cal3d", but
CMake did not find one.
...

@bitfield:
bitfield

Жуик Пипл, нид хелп. Как заставить cmake линковать программу с liboost_thread.so, не с libboost_thread.so.1.40.0?

@Equidamoid:
Equidamoid

Сабж напрочь игнорирует файлик с ассемблерным кодом

@arrowdodger:
arrowdodger

Как юзать CMake и VS (сперто со стаковерфлоу):
well, we use cmake and VS to develop. And after the shock (from my side when I joined the company one year ago) I like it way better to be forced to write down your cmakelist.txt. It makes you THINK about the structure of your project before you shoot into the blue (aka "rmt -> new file" ). So we do it around. Add files into cmakelist first and configure/generate the .sln files via cmake

@nib952051:
nib952051

неделю назад или около того ковырял cmake плагин к креатору, лол с помощью святого костыля, получилось в дерево исходников всунуть qml file`ы

@Equidamoid:
Equidamoid

Мануалы в вебе в виде одной огромной страницы — та ещё гадость.

@Annoynimous:
Annoynimous

[07:55:38]<juick> Message too long. Maximum length — 4096 bytes.
bnw.im

@hatred:
hatred

CMakeProjectManager2 — последние изменения

Как я уже писал (http://htrd.su/wiki/zhurnal/2011-03-24_14.49_qt_creator_i_cmake_-_prodolzhenie), вяло пилю модифицированную версию плагина CMakeProjectManager для Qt Creator'а. Там же указаны причины, вынудившие меня на это. Но разговор, не про это, а про то, что с момента прошлого поста было сделано.

Итак:

Для каждого профиля сборки сохраняются введённые параметры для CMake, так что, выбрав в следующий раз «Run CMake» не нужно вспоминать, с какими параметрами вы его запускали и легче управлять профилями сборки. Вкупе с последней фичей из апстрима: сохранения глобальной истории параметров для CMake, получается достаточно мощный механизм.
Используя вышеприведённую информацию, появилась возможность при модификации дерева исходников (добавление, удаление, переименование) в фоновом режиме запускать обновление CBP файла и дерева сборки, что особо актуально при использовании глоббинга.
По сравнению с первым вариантом, получилось значительно сократить расходование памяти при использовании плагина, особенно когда в дереве проекта много вспомогательных модулей, временного C/C++ кода.
Кодовая база периодически синхронизируется с GIT версией Qt Creator. Если кто-то будет делать клоны для стабильных релизов, просьба отписываться с информацией об оных.

HINT:
Так как, при добавлении, удалении или переименовывании файла, не осуществляется модификация CMakeLists.txt, то нужно вносить изменения самому, либо использовать globbing:

# UTILS
file(GLOB_RECURSE UTIL_SOURCES "../util/*.cpp")
file(GLOB_RECURSE UTIL_HEADERS "../util/.h" "../util/.hpp")
На полноценный парсер пока времени нет (хотя уже адоптирован на чистый C++/Qt оный из KDevelop), к тому же, в списке рассылки Qt Creator проскакивала новость, что одна команда разрабатывает полноценный плагин (тыц — digipedia.pl Зная это, не хочется делать бесполезную работу, при том, что текущий функционал уже вполне удовлетворяет.

Src: htrd.su

@arrowdodger:
arrowdodger

Я открыл Hello World на Хаскелле в Кдевелопе и оно работает круче, чем EclipseFP или Leksah.
Подсветка синтаксиса (видимо из Kate), генерик автокомплит, менеджер проектов на симейке. Крутота же.

@Equidamoid:
Equidamoid

Из-за какого-то бага в коде придётся переходить на унылый qmake. Прискорбно...

@alar:
alar

CMAKE
Найдено в цмэйкфайлах одной известной СУБД:

FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c
"#ifdef __cplusplus\n"
"# error \"The CMAKE_C_COMPILER is set to a C++ compiler\"\n"
"#endif\n"
"#if defined(__CLASSIC_C__)\n"
"int main(argc, argv)\n"
" int argc;\n"
" char* argv[];\n"
"#else\n"
"int main(int argc, char* argv[])\n"
"#endif\n"
"{ (void)argv; return argc-1;}\n")

Вот нахрена вот так вот делать? Почему нельзя было этот сишник просто рядом положить? Число сборочных файлов там и так не один, а пара десятков, то есть, аргумент "чтоб всё в одном файле таскать" разумным не кажется.

@Equidamoid:
Equidamoid

cmake.org
Как НЕ надо оформлять документацию.

@Equidamoid:
Equidamoid

Could NOT find Qt4 (missing: QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE
QT_UIC_EXECUTABLE) (found version "-unix is deprecated.

4.7.2")
Похоже, кто-то криво написал парсер.

@borman:
borman

Жуйк, подскажи по cmake. Достался некоторый код, который состоит из зависимых друг от друга библиотек и программы. Каждый из подпроектов собирается через cmake. По моим впечатлениям, CMakeLists написаны не очень грамотно, так что я хочу либо исправить текущую ситуацию, либо заменить систему сборки.
Собственно, проблема: допустим, у нас есть проекты SOMEPROG и SOMELIB, и первый хочет слинковаться со вторым. Сейчас там жестко вшит префикс, и SOMEPROG предполагает, что SOMELIB будет уже установлен по нему на момент сборки. У меня нет желания ставить чтот-о из этого в систему, так что хочу, чтобы цеплялись библиотеки более-менее из дерева сборки. На данный момент происходит такое:

FIND_PATH(SOMELIB_INCLUDE somelib/foobar.h PATHS /opt/include /usr/include /usr/local/include)
INCLUDE_DIRECTORIES(${SOMELIB_INCLUDE})
FIND_LIBRARY(SOMELIB_LIBRARY NAMES SOMELIB PATHS /opt/lib /usr/lib /usr/local/lib)

Как наиболее канонично решить мою проблему?
З.Ы. Plain GNU make рулит, но мне тупо лень выстраивать такую систему с зависимостями вручную.

@lockie:
lockie

goo.gl

@Bogolt:
Bogolt

never ever try to build cmake project within it's source directory. Очень долго не мог понять отчего у меня multiple 'main' definition при сборке

@bioh:
bioh

Какие самые значительные минусы cmake и scons?

@arrowdodger:
arrowdodger

Во! Запилил!
arr: ~/projects/tests/cmake/haskell/build> cmake ..
— Check for working Haskell compiler: /usr/local/bin/ghc
— Check for working Haskell compiler: /usr/local/bin/ghc — works
— Configuring done
— Generating done
— Build files have been written to: /home/arr/projects/tests/cmake/haskell/build
arr: ~/projects/tests/cmake/haskell/build> make
Scanning dependencies of target test
[100%] Building Haskell object CMakeFiles/test.dir/Main.hs.o
Linking Haskell executable test
[100%] Built target test
arr: ~/projects/tests/cmake/haskell/build> ./test
Hello CMake!
arr: ~/projects/tests/cmake/haskell/build>

@hatred:
hatred

на будущую укурку:
blog.cryptomilk.org
airport1.de

@gelraen:
gelraen

Жуйк, я что-то не осиливаю скормить CPack Info.plist.
Пробовал такое:
add_executable(${TARGET} MACOSX_BUNDLE)
set_target_properties(${TARGET} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/Info.plist.in")
И такое:
set(CPACK_BUNDLE_PLIST "${CMAKE_SOURCE_DIR}/Info.plist.in")
set(MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/Info.plist.in")

В обоих случаях в bundle получающемся с использованием cpack -G DragNDrop нету Info.plist. ЧЯДНТ?

ЗЫ: первый вариант был утащен отсюда: github.com

@lockie:
lockie

Q: Как определить, что какой-то софт писал гентушник?
A: По наличию цветовой раскраски при билде
(c) freebsd.rusnet.org.ru

@hatred:
hatred

Qt Creator и CMake — продолжение
Некоторое время я поднимал тему связки Qt Creator и CMake, тогда всё показалось не очень хорошо.
В общем, собрался и сделал несколько лучше: малость допилил плагин CMakeProjectManager, реализовав следующие фичи...
Читать: hatred.homelinux.net

@hatred:
hatred

Qt Creator и CMake:
Пакость: Qt Creator умеет импортировать CMake проекты, проблема в том, что в дереве далеко не все файлы отображаются.
Причина: делается этот импорт через откровенную задницу: вызывает cmake с генератором »-G'CodeBlocks — Unix Makefiles'», генерируя тем самым XML-файл проекта формата CodeBlocks. Но тут накладывается вторая задница: сам генератор обрабатывает файлы только для таргетов: executable, static_library, shared_library, module_library, всё остальное он забывает запихнуть в результирующий '.cbp'.
Решение: hatred.homelinux.net

ЗЫ более прямое есть?

@MrFree:
MrFree

[22:43:48] <torkvemada> напомни, как в цмаке включить вывод того, как он вызывает компилятор для каждого файла
[22:44:52] <Элессар> -DCMAKE_VERBOSE_MAKEFILE=1

@sattellite:
sattellite

Есть одна софтина в репозитории. Разработчик пользуется Ubuntu и у него соответственно все работает. Пользователи же других дистрибутивов не могут собрать исходники (пробовал на ubuntu — собирается). Софтина написана на vala. cmake ругается, что не может найти rest и rest-extras. Но /usr/share/vala{,0.10,0.12}/vapi/rest{,-extras}-0.6.{deps,vapi} существуют. Сам репозиторий bitbucket.org
Собственно вопрос, как узнать куда cmake обращается за этими модулями и как ему указать куда надо за ними обращаться?

@arrowdodger:
arrowdodger

Ого, оказывается помимо cmake-gui на кутях есть еще и ccmake на curses. Найс.

@arrowdodger:
arrowdodger

Трындец, ну кто там пишет маны по модулям у них? Оказывается, чтобы модуль все таки юзал BOOST_ROOT для поиска буста и игнорировал дефолтные пути мало просто задефайнить BOOST_ROOT. Надо еще задефайнить Boost_NO_SYSTEM_PATHS (да, да, с lowercase Boost, иначе не заработает) и об этом в мане ни слова. Об этом вообще нигде ни слова, кроме варнинга на винде (!!!).

@gelraen:
gelraen

Блин, почему я сегодня в ccmake постоянно пытаюсь печатать как в vim ?

@wwarlock:
wwarlock

MacPorts base version 1.9.1 стал зачем-то требовать старую джаву 1.6.0_03 и это при установленной 1.6.0_22.

cmake requires the Java for Mac OS X Developer Package from the Apple Developer Connection at connect.apple.com.
For Mac OS X 10.6: adcdownload.apple.com