2013-02-04 21 views
7

Muszę skompilować pliki .proto bufora protokołu do plików .pb.cc, .pb.h. Istnieje program do tej konwersji.CMake: Jak dodać niestandardową ogólną regułę kompilacji?

protoc test.proto --cpp_out . 

Jak mogę dodać taką ogólną regułę w cmake? Mogę to zrobić za pomocą polecenia add_custom_command. Ale muszę to zrobić dla każdego pliku .proto. Czy jest lepszy sposób to zrobić?

+0

Witaj Mohammad, odpowiedź Frasera jest prawidłowa, proszę potwierdzić to. – guinny

Odpowiedz

6

Wygląda na to, że moduł CMake FindProtobuf zapewnia tę funkcję za pomocą funkcji PROTOBUF_GENERATE_CPP.

Możesz przesłać wiele plików .proto w jednym wywołaniu, np.

file(GLOB ProtoFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.proto") 
PROTOBUF_GENERATE_CPP(ProtoSources ProtoHeaders ${ProtoFiles}) 

Należy pamiętać, że nawet jeśli plik CMakeLists.txt który nazywa find_package(Protobuf) może być najwyższego poziomu jeden plik (ów) CMakeLists.txt które wywołać funkcję musiałaby być w tym samym katalogu co. pliki proto.

+6

Aby rozwinąć, $ {ProtoSources} i $ {ProtoHeaders} to zmienne, które zawierają odpowiednio pliki .pb.cc i .pb.h Mogą być używane bezpośrednio w funkcjach add_library() i add_executable(). – psalvaggio

Powiązane problemy