简体   繁体   中英

In Protocol Buffers, how to import a file from the upper level directory?

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?

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";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM