LINUX.ORG.RU

qtcreator и add_custom_target в cmake

 ,


0

4

Есть в CMakeLists.txt такая конфигурация:

add_custom_command(
   OUTPUT MyFile.c
   COMMAND blabla
)

set(my_SOURCES
    MyFile.c
)

add_library(mylib ${my_SOURCES})

Всё генерируется и собирается, но сгенерированные файлы не отображаются в QtCreator'e. Можно их как-то отобразить? (версия creator'a 3.5.1)

★★★★★

Надо добавить цель, установить у сорца свойство generated.

Примерно так:

find_package(PythonInterp 2.6 REQUIRED )

set(LIBTZ_TIMEZONES_MAPPING_HEADER ${CMAKE_SOURCE_DIR}/src/timezones_map.h)
set(LIBTZ_TIMEZONES_MAPPING_GENERATOR_SCRIPT ${CMAKE_SOURCE_DIR}/scripts/transform.py)
setDefault(LIBTZ_TIMEZONES_MAPPING_GENERATOR_FALLBACK_SOURCE ${CMAKE_SOURCE_DIR}/resources/windowsZones.xml)

add_custom_command(OUTPUT ${LIBTZ_TIMEZONES_MAPPING_HEADER}
    COMMAND ${PYTHON_EXECUTABLE}
    ARGS    ${LIBTZ_TIMEZONES_MAPPING_GENERATOR_SCRIPT} ${LIBTZ_TIMEZONES_MAPPING_GENERATOR_FALLBACK_SOURCE} > ${LIBTZ_TIMEZONES_MAPPING_HEADER}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)

SET_SOURCE_FILES_PROPERTIES(${LIBTZ_TIMEZONES_MAPPING_HEADER} PROPERTIES GENERATED 1)

add_custom_target(timezones-map SOURCES ${LIBTZ_TIMEZONES_MAPPING_GENERATOR_SCRIPT}
    ${LIBTZ_TIMEZONES_MAPPING_HEADER}
    ${LIBTZ_TIMEZONES_MAPPING_GENERATOR_FALLBACK_SOURCE}
)

Тут даже питонячий скрипт попадает в сорцы.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

с qtc 4.0.3 у меня такой фокус не работает. Файлы генерячатся, компиляются, но в сорцах их не видно.

anonymous
()
Ответ на: комментарий от pon4ik

Надо добавить цель

У меня уже есть add_library

установить у сорца свойство generated.

Попробовал, что-то не помогло.. Ничего, что файлы генерируются в ${CMAKE_CURRENT_BUILD_DIR} или нужно именно в SOURCE_DIR?

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

Проверил, в 4.0.0 тоже не работает.

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

Вообщем сорри походу мимо. Хотя я почему-то помню как будто-бы и хидер в дереве сорцов появлялся.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Вообщем сорри походу мимо. Хотя я почему-то помню как будто-бы и хидер в дереве сорцов появлялся.

Судя по тенденции CMake явно у них не в приоритете. А в 4-ом они вообще дропнули поддержку CMake < 3.0, пришлось откатиться на qtcreator-3.5..

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

Ан нет, вру. Хидер просто не был в сорцы добавлен.

Если добавить его в сорцы либы, и сделать

add_dependencies(mylib generate-header)

То всё отображается корректно.

pon4ik ★★★★★
()
Ответ на: комментарий от UVV

Запили минимальный пример эхо int main(){return 0;}. Сразу видно будет чего не выходит.

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

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

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

Куда залить? glib с пистоном у тебя есть (для генерации)? Если не сложно, то можешь в скайпе меня найти, через него пошлю )

UVV ★★★★★
() автор топика
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от UVV

Да сделай прост hello world на шеловских коммандах и выложи в любой паблик, хоть на gh хоть на халявную файлопомойку.

Возможно пока делаешь и проблема решится :)

pon4ik ★★★★★
()
Ответ на: комментарий от UVV

и выложи в любой паблик, хоть на gh хоть на халявную файлопомойку

там же больше людей посмотрит, и советов ценных надают.

pon4ik ★★★★★
()
Ответ на: комментарий от anonymous

О, спасибо аноним. У меня почти такой же случай.

UVV ★★★★★
() автор топика
Ответ на: комментарий от anonymous

UVV

Я пока что смотрю на оба этих проекта, в одном сорец показывается, в другом нет. В чём разница пока что не вижу (привёл к примерно одному виду).

qtc и cmake - те же.

Может дело в том что там я имею дело с хидером, но я проверил, хидер записывается прямо в cbp файлик, даже без qtc вовсе.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

qtc и cmake - те же.

Что за qtc? Я свой проект могу завтра выложить, поскольку уже ушёл с работы. Хотя не думаю, что поведение будет чем-то отличаться

UVV ★★★★★
() автор топика
Ответ на: комментарий от anonymous

OK, просто первый раз увидел такое сокращение =)

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

Да не не надо, я анонимуса поделку попробую домучать :)

Принципиально там ничего не отличается по идее.

pon4ik ★★★★★
()
Ответ на: комментарий от anonymous

UVV.

Дело было не в бабине.

В моей поделке использовался aux_source_directory, который соответсвенно подхавывал файлик сгенерированный в прошлый раз при правке скрипта.

Похоже действительно никак, ну или по крайней мере я не знаю как.

Косяк, в том, что qtc использует code::blocks формат проекта, а в cmake сий генератор отрабатывает некорректно. Возможно, такое даже и не соберётся кодовыми блоками в итоге :)

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

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Возможно, такое даже и не соберётся кодовыми блоками в итоге

Суть такова: qtc использует генератор «CodeBlocks - Unix Makefiles» или «CodeBlocks - Ninja», т.е. собираться оно будет точно так же, как и с обычными Unix Makefiles и Ninja, а вот cbp-файл может быть и не совсем корректным

annulen ★★★★★
()
Ответ на: комментарий от UVV

А в 4-ом они вообще дропнули поддержку CMake < 3.0

4.2, c ninja все работает, а если не используешь ninja - то ты и так ССЗБ

annulen ★★★★★
()
Ответ на: комментарий от pon4ik

Но сорец генерируется в CMAKE_SOURCE_DIR

сорец генерируется

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

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Код может быть либо исходным, либо сгенерированным, взаимоисключающе.

Код может быть сгенерированным в одной операции и исходным в другой

annulen ★★★★★
()
Ответ на: комментарий от annulen

Т.е. для codeblocks генерируется и файл проекта и мэйкфайлы всегда? Там же вроде своя распрекрасная система сборки, хм.

pon4ik ★★★★★
()
Ответ на: комментарий от annulen

Код может быть сгенерированным в одной операции и исходным в другой

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

Dendy ★★★★★
()
Ответ на: комментарий от pon4ik

Там же вроде своя распрекрасная система сборки, хм.

В code::blocks? Он вроде мейкфайл по проектному файлу тупо делает. Если я правильно помню.

EXL ★★★★★
()
Ответ на: комментарий от annulen

4.2, c ninja все работает, а если не используешь ninja - то ты и так ССЗБ

Я честно попробовал, но что-то не взлетело. Попробую ещё раз. Как прокомментируешь вот это https://bugreports.qt.io/browse/QTCREATORBUG-16125 ?

even with cmake 2.8.x and ninja is available in ubuntu 14.04

- не значит, что заработает.

UVV ★★★★★
() автор топика
Ответ на: комментарий от EXL

Как минимум не только

Very fast custom build system (no makefiles needed)

В этом они тоже решили спародировать студию :)

pon4ik ★★★★★
()
Ответ на: комментарий от UVV

Чет я ушёл в отпуск, и забил :)

По сути - можно разбираться самим (скользкая дорожка, так можно и опенсурс начать разрабатывать), либо завести багу с тем, чем поделился анон и словами «ай яй яй в cbp файлик генерированные сорцы не попадают, как так».

Откуда файлик брался у меня - использовался aux_source_directory в директории, где генерируется файлик, при правке cmake скрипта, получалось, что уже сгенерённый сорец добавлялся в список нормальных сорцов, и в cbp файл. Вообщем ссзб.

pon4ik ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.