In Protocol Buffers, how to import a file from the

2019-02-03 10:17发布

问题:

I have the following code in a protocol buffer file(pcfg_lm.proto):

import "../types/language.proto";

package nlp;

message PCFGProto {
  required Language lang = 1;
}

And of course there is a proto file exists at ../types/language.proto. However, when I issue the command:

protoc pcfg_lm.proto --cpp_out=/tmp

Here is the error message:

../types/language.proto: File not found.
pcfg_lm.proto: Import "../types/language.proto" was not found or had errors.
pcfg_lm.proto:6:12: "Language" is not defined.

I think there must be some way to specify the file names in the upper level directories, without using the -I flag. But how do I do that?

回答1:

You can use the --proto_path= directive to specify which directories to search for imports. It can be used multiple times if needed.

The correct --proto_path will depend on how the package is defined in the imported file (language.proto).

  1. If the imported file (language.proto) contains package types;

    specify --proto_path=Parent directory and change the import to

    import "types/language.proto";

  2. If the imported file has no package

    specify --proto_path=Parent directory/types and change the import to

    import "language.proto";