использовать Cmake DEPFILE с файлами protobuf - PullRequest
0 голосов
/ 03 мая 2020

Следующие CMakeLists объявляют пользовательскую команду для компиляции 2 файлов protobuf: msg1.proto (автономно) и msg2.proto (включает msg1.proto).

cmake_minimum_required(VERSION 3.13)

foreach(pfile msg1.proto;msg2.proto)
  string(REPLACE ".proto" ".pb.cc" proto_source "${pfile}")
  string(REPLACE ".proto" ".pb.h" proto_header "${pfile}")
  add_custom_command(
    OUTPUT ${proto_source} ${proto_header}
    BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/${pfile}.d
    COMMAND protoc -I=.. --cpp_out=. --dependency_out=${pfile}.d ${pfile}
    DEPFILE ${pfile}.d
    DEPENDS ${pfile}
  )
endforeach()

add_library(mylib msg2.pb.cc)

Сгенерированный файл msg2.proto.d правильно объявляет зависимость между msg2.pb.cc и msg1.pb.h, но msg1.pb.h никогда не создается, а компиляция msg2.pb.cc все еще не выполняется.

$ ninja 
[2/3] Building CXX object CMakeFiles/mylib.dir/msg2.pb.cc.o
FAILED: CMakeFiles/mylib.dir/msg2.pb.cc.o 
/usr/bin/c++     -MD -MT CMakeFiles/mylib.dir/msg2.pb.cc.o -MF CMakeFiles/mylib.dir/msg2.pb.cc.o.d -o CMakeFiles/mylib.dir/msg2.pb.cc.o -c msg2.pb.cc
In file included from msg2.pb.cc:4:
msg2.pb.h:33:10: fatal error: msg1.pb.h: No such file or directory
 #include "msg1.pb.h"
          ^~~~~~~~~~~

Чего не хватает для работы опции DEPFILE?

...