2013-05-24 6 views
2

Модуль FindProtobuf, доступный в cmake, предлагает команду PROTOBUF_GENERATE_CPP, которая вызывает protoc из cmake. Эта команда обычно выполняется во время компиляции (при запуске «make»). Поскольку некоторые из моих исходных файлов включают сгенерированные файлы, проверка зависимостей во время «cmake ..» терпит неудачу, потому что файлы еще не сгенерированы.PROTOBUF_GENERATE_CPP при создании файлов cmake

Возможно ли, чтобы эта команда выполнялась во время настройки непосредственно перед проверкой зависимостей?

Благодаря

+0

Глядя на файл FindProtobuf.cmake, он выглядит как 'PROTOBUF_GENERATE_CPP' должен сделать эти файлы, когда вы вызываете функцию во время настройки. Когда он это сделает, он должен распечатать 'Running C++ protocol buffer compiler на $ {MATCH_PATH} с root $ {PROTOROOT}, генерируя: $ {CPP_FILE}' Вы видите, что когда вы настраиваете? – SethMMorton

+0

Если по настройке вы имеете в виду выполнение команды «cmake ..», нет. Я вижу это, когда компилирую код с make. – Trixl

+0

Взгляните на [ADD_DEPENDENCIES] (http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:add_dependencies). Попробуйте запустить 'PROTOBUF_GENERATE_CPP' с' DEBUG' и посмотреть информацию, которую он дает. Возможно, вы сможете указать своей цели, чтобы она зависела от вывода «PROTOBUF_GENERATE_CPP», чтобы определить, что делать во время сборки (т. Е. При запуске 'make'). – SethMMorton

ответ

0

Вы можете пометить файлы, как будет создан, так что проверка зависимостей будет работать:

file(GLOB PROTOBUF_FILELIST ${CF_PROTO_INCLUDE_DIR}/*.proto) 
foreach(proto_file ${PROTOBUF_FILELIST}) 
    get_filename_component(proto_name ${proto_file} NAME_WE) 
    get_filename_component(proto_path ${CF_PROTO_INCLUDE_DIR} ABSOLUTE) 
    set_source_files_properties("${proto_path}/${proto_name}.pb.cc" 
           "${proto_path}/${proto_name}.pb.h" 
           PROPERTIES GENERATED TRUE) 
endforeach() 
Смежные вопросы