Как указать выходные данные для классов Java protobuf

#java #cmake #protoc

Вопрос:

Я работал над тем, чтобы наша система CMake на работе не позволяла всегда восстанавливать классы обертки Java для наших протобуфов; на данный момент одно изменение в модульном тесте C требует перестройки нескольких сотен из них. Команды протокола Python и C выполняются в разных обстоятельствах.

Поскольку я не использую файлы классов Java, я не уделял слишком пристального внимания; но я , наконец, понял проблему: при компиляции XMessage.proto , которая содержит вызываемый XMessage протобуф, протокол создает выходной файл как XMessageOuterClass.java (чтобы соответствовать имени, используемому для класса-оболочки). Это не соответствует ожидаемому выходному имени, указанному в CMake, и поэтому оно всегда перестраивается.

Мой вопрос: как я могу определить с уровня CMake, будет ли у протобуфа искажение этого имени или нет, чтобы я мог OUTPUT правильно указать команду и предотвратить ненужное восстановление?

Комментарии:

1. Как вы генерируете java-файлы с помощью protobuf? Модуль FindProtobuf , поставляемый вместе с CMake, может генерировать только файлы C и Python.

2. @Tsyvarev Я думаю, ответ в том, что у нас есть пользовательский FindProtobuf. Я этого не писал, я просто хочу, чтобы он перестал плохо себя вести.

3. Поэтому вам нужно указать в выводе CMake те файлы, которые на самом деле созданы protobuf. (Другими словами, ваша спецификация ВЫВОДА должна предсказывать файлы, которые будут созданы компилятором protobuf.)