使用 Make Multithreaded 时强制 PROTOBUF_GENERATE_CPP 完成

Forcing PROTOBUF_GENERATE_CPP To Complete When Using Make Multithreaded

给定一个简单的cmake文件,例如

PROTOBUF_GENERATE_CPP( ProtoSources ProtoHeaders Example.proto ) ADD_LIBRARY( Example SHARED Example.cpp )

有没有办法在使用 make -j8 时强制 PROTOBUF_GENERATE_CPP 在下一步开始之前完成?

(上下文:在 cmake 文件上使用 cmake . ; make -j8 时,第一个 运行 几乎总是失败,因为在编译库时 protobuf 文件尚未完成处理。第二个运行 总是工作正常,但最好避免每次都必须 运行 make 两次。)

我假设 'Example' 依赖于 ProtoSources and/or ProtoHeaders。 否则构建顺序无关紧要。

您需要告诉 CMake 'Example' 和生成的文件之间存在依赖关系。

尝试将这些行添加到您的脚本中

add_custom_target(generated_code DEPENDS ${ProtoSources} ${ProtoHeaders})
add_dependencies(Example generated_code)