假设我们有一个包含一些子目录的项目,并且需要在其子目录之一中生成 .cpp 和 .h 文件。事实是:如果我们在该目录中运行命令(不带 < 和 >),它会生成有效文件。
那么如何使用 cmake 来做同样的事情呢?
Cmake有add_custom_command,但它什么也不做,所以我们不能使用它。execute_process 更好,因为它运行一些东西,但是以错误的方式运行。
execute_process(COMMAND "protoc -I=\".\" --cpp_out=\".\" protocol.proto"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)
不幸的是,结果什么也没有,因为 cmake 无法正确运行命令,因此“protoc”打印“No such file or directory”。
添加/编辑:此execute_process调用位于CMakeLists.txt中,该txt与protocol.proto文件位于同一目录中
为什么它不能简单地运行这个命令?
是否newBuilder()创建一个新的Java对象?我的快速测试似乎并非如此。调用.hashcode()2个不同的对象,它具有相同的哈希码。
import com.mydomain.proto.users.api.User;
...
User a = User.newBuilder().setUserUuid("1111111111").build();
User b = User.newBuilder().setUserUuid("1111111111").build();
System.out.println("a hashcode: " + a.hashCode());
System.out.println("b hashcode: " + b.hashCode());
// assertNotEquals fails.
assertNotEquals(a.hashCode(), b.hashCode());
Run Code Online (Sandbox Code Playgroud)
将它们打印出来并看到哈希码是相同的,尽管我期待一个新的 Java 对象。
a hashcode: 611667980
b hashcode: 611667980
Run Code Online (Sandbox Code Playgroud)
注意,我们正在使用这个
'com.google.protobuf:protobuf-java-util:3.12.0'
Run Code Online (Sandbox Code Playgroud) 我第一次在 Go 中使用 protobuf(和 protoc)。
message MyProtoStruct {
string description = 1;
}
Run Code Online (Sandbox Code Playgroud)
我有点困惑:
我应该使用方法来获取值(如MyProtoStruct.GetDescription())还是
我应该直接使用字段(如MyProtoStruct.Description)吗?
我想将 ByteArray 转换为字符串,然后将字符串转换为 ByteArray,但是在转换时值发生了变化。有人帮助解决这个问题。
人.proto:
syntax = "proto3";
message Person{
string name = 1;
int32 age = 2;
}
Run Code Online (Sandbox Code Playgroud)
sbt 编译后,它给出案例类 Person (编译时由 google protobuf 创建)
我的主课:
val newPerson = Person(
name = "John Cena",
age = 44 //output
)
println(newPerson.toByteArray) //[B@50da041d
val l = newPerson.toByteArray.toString
println(l) //[B@7709e969
val l1 = l.getBytes
println(l1) //[B@f44b405
Run Code Online (Sandbox Code Playgroud)
为什么价值观改变了?如何正确转换??