LINUX.ORG.RU

Добавить цель с распаковкой архива при его изменение

 , ,


0

1

Добрый день,

Есть очень большой проект в котором огромное множество конечных таргетов, естественно все разбито по подкаталогам и местным CMake файлам. Хочется добавить таргет от которого будет зависеть часть текущих таргетов(не все) и чтобы этот таргет при сборке делал только одно - распаковывал архив(обычный tar), но только в случае если архив обновлился. То есть если архив не менялся, то просто оставляем все как есть, если менялся, то распаковываем (желательно с полным удалением результата от старой распаковки).

Пытался баловаться с add_custom_command, но ничего не вышло, добился только того, чтобы tar запускался на каждом вызове.

★★★★★

Смотри в сторону add_custom_target и указания исходных файлов для неё. В данном случае должно соблюдаться как минимум условие, что тарбол есть исходный файл, не помню должен ли он обязательно быть выходным какой то из целей сборки. О5 же - обязательно указывать выходной файл, иначе - кина не будет, в худшем случае это может быть просто трогаемый файлик, но по-науке, это должно быть содержимое тарбола или что-то на его основе. Что бы было чьё время с чьим сравнивать.

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

Вру, target is always considered out of date. Есть чёткое ощущение, что я как-то это обходил, а вот как - уже и не вспомнить похоже.

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

Пока получилось добиться только такого

project(PRJ)
add_custom_command(
  OUTPUT cmd
  COMMAND cmake -E echo "ololo"
  DEPENDS test1.txt
)

add_custom_target(cmd-wr DEPENDS cmd)

add_custom_target(tsk1 DEPENDS cmd-wr)
add_custom_target(tsk2 DEPENDS cmd-wr)



add_custom_target(all-tsk DEPENDS tsk1 DEPENDS tsk2)

При запуске make -j32 all-tsk «ololo» печатается только раз. Это уже в целом приемлемо. Но изначальное было желание, чтобы и команда не запускалась если файл test1.txt неизменен.

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

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

Попробуй с таким патчем:

set(TARGET ${CMAKE_BINARY_DIR}/cmd) 
add_custom_command(
  OUTPUT ${TARGET}
  COMMAND cmake -E echo "ololo" > ${TARGET}
  DEPENDS test1.txt
)
pon4ik ★★★★★
()

Предполагая, что распаковывать надо в build (а не configure) time

тебе нужно нагенерировать скрипт, который будет смотреть на твой tar (например сравнивая с хэш суммой из файла) и распаковывать если что. Кроссплатформеннее всего будет генерировать .cmake файл (типа install-bla-bla-bla.cmake), но я обычно забиваю и просто кладу check-foo.py в project/scripts

И, да, последний раз я сталкивался с такой проблемой может месяц назад, и в cmake нихрена не было

Stil ★★★★★
()

Оказалось, что распковка каждый раз не так и страшна: отрабатывает мгновенно, make не считает перезаписанные файлы измененными(нет пересборки), в целом такой вариант ок. С md5sum решил не заморачиваться.

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

Так и не смог побороть распаковку архива повторную, но в целом «и так сойдет». Спасибо!

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