需求:
假设在目录 /home/usr/proto 下有多个proto文件
程序编译要使用proto文件生成的代码,
实施
我想直接在CMakeLists.txt文件中直接就调用protoc程序生成代码,结果发现*号总是不好用,
无奈最后还是写了shell脚本,然后在cmake文件中调用shell脚本
set(proj_path "/home/usr/proj")
execute_process(
COMMAND sh gen_proto_files.sh
WORKING_DIRECTORY ${proj_path}
)
懒省事是一个程序应有素质,还是得继续想办法
下面就是解决方案
set(proto_file_path "/home/usr/proto/")
file(GLOB PROTO_NAMES "${proto_file_path}*.proto")
execute_process(
COMMAND protoc --proto_path=${proto_file_path} --cpp_out=${proto_file_path} ${PROTO_NAMES}
WORKING_DIRECTORY ${proto_file_path}
)
file(GLOB head_files "${proto_file_path}*.h")
file(GLOB src_files "${proto_file_path}*.cc")
execute_process(
COMMAND cp ${head_files} ${proj_path}/inc/
COMMAND cp ${src_files} ${proj_path}/src/
WORKING_DIRECTORY ${proto_file_path}
)
使用Cmake的file命令,关于file命令的使用大家可以自行百度。
直接在COMMAND 中使用 *.proto 的话*号是不起作用的