Мы используем среднюю систему сборки cmake. Обычно пользователи используют «ниндзя», хотя поддерживается «make».
Независимо от того, какую команду «ниндзя» выполняет пользователь (кроме «чистой»), я хочу, чтобы ПЕРВАЯ вещь, которую выполняет ниндзя, выполнялась custom_command (). Когда «ниндзя» заканчивается, я хочу, чтобы ПОСЛЕДНЯЯ вещь, которую ниндзя делал (даже если была ошибка), состояла в запуске другого custom_command ().
, потому что я хочу, чтобы он запускал цель FIRST независимо от фактической target, и запускаться только один раз, не очевидно сделать это с помощью add_dependencies ().
Поскольку я хочу, чтобы он запускал цель LAST, даже когда ниндзя обнаружил ошибку, не очевидно, как это сделать в cmake. в любом месте.
Самый очевидный способ - это создать файл сценария, назовем его «Ninja», который будет делать:
#!/bin/bash
ninja run-first-target # <-- Run my first target
ninja $*; # <-- Run what the user wants (pass, fail, whatever)
ninja run-last-target # <-- Run my last target
Тогда я должен заставить всех использовать «Ninja» вместо "ниндзя". (Я бы создал аналогичную вещь для пользователей "make".)
Какой здесь лучший подход? Ниндзя (или cmake) предлагает какие-либо обратные вызовы?