2015-01-21 5 views
0

У меня есть структура проекта следующим образом. A.dll зависит от B.exe, B.exe зависит от настраиваемой цели C. Пользовательская цель C генерирует некоторые файлы, которые B.exe упаковывают в архив в качестве этапа пост-сборки на целевом B.
Когда я впервые построил A .dll, так как это первый раз, когда создается B.exe, и в качестве этапа post myArchieve.a создается. С этого момента, если я создаю A.dll, B.exe не будет восстановлен, поскольку он является исполняемым и существует из-за предыдущей сборки. Проблемы из-за этого:
1. У меня всегда есть устаревший исполняемый файл
2. Если я вношу некоторые изменения в C и запускаю сборку A.dll, cmake просто перестраивает C и A. Он не восстанавливает B .exe, и в результате он пропустил шаг архивирования, и мой архив никогда не обновляется.cmake исполняемый файл не восстанавливается

Есть ли решение этой проблемы? Я уже прочитал ссылку this и не очень помогает.

ответ

0

Существует принципиальная проблема с вашей настройкой: упаковка не должна быть шагом после сборки.

Вместо этого вы должны использовать add_custom_command для упаковки и иметь эту команду DEPENDS как на цели, которая строит B.exe и выходные файлы из пользовательских целевого C.

+0

Это не сработает, потому что в документации add_custom_command четко указано, что пользовательская команда задана как правило для таргетинга, которая использует свои выходные файлы в качестве исходного файла. Мой вывод, т. Е. «MyArchieve.a», не используется в качестве источника какой-либо целью. Следовательно, эта пользовательская команда не будет добавляться ни в какую цель. – tejas

Смежные вопросы