gflags是什么?gflags是google开源的命令行标记处理库;
那么什么是命令行标记呢?顾名思义就是当运行一个可执行文件时,由用户为其指定的标记,形如:
fgrep -l -f ./test ccc jjj
注意上述命令,-l与-f ./test是命令行标记,而ccc与jjj是命令行参数,因为这两者不是以破折号开头的。
一般的一个可执行文件,允许用户为其传入命令行标记以及参数,如上述例子,-l是一个不带参数的标记,-f是一个带了参数“./test”的标记,而gflags可以解析这些标记以及参数并将其存储在某些数据结构中。
gflags支持主要的一些参数类型包括string, bool, int32, int64, double等
定义参数通过DEFINE_(类型)决定,如DEFINE_bool,该宏的三个参数含义分别为命令行参数名, 参数默认值, 以及参数的帮助信息,帮助信息写入用"..."
当参数被定义后, 通过FLAGS_(名字)就可访问到对应的参数,如FLAGS_collect_metrics.
DEFINE_string(configuration_directory, "","...")
上面这个的参数默认值是留空的,是用launch文件传入的
中间有个-configuration_directory, -表示是命令行标记,和gflags的定义是一样的,后面跟的是传入的内容$(find cartographer_ros)/configuration_files, 并且被赋予到FLAGS_configuration_directory成为一个宏,如果下面的程序需要使用这个变量,则使用FLAGS_configuration_directory就行
同理
DEFINE_string(configuration_basename, "",
"Basename, i.e. not containing any directory prefix, of the "
"configuration file.");
-configuration_basename pr2.lua
FLAGS_configuration_basename为pr2.lua这个string,并不代表pr2.lua文件内的内容,只是文件名
glog简介:glog在gflags或者里面似乎include了
Google glog是一个应用级别的日志系统库.它提供基于C++风格的流和各种辅助宏的日志API.支持以下功能:
精简日志字符串信息最终的结果不仅会在屏幕终端显示出来, 同时会将log日志写入到/tmp/...log....这个文件中.
glog在cartographer的CMakeLists里面,不在cartographer_ros的CMakeLists里面.
override
用于直接明了的告诉编译器该函数用于重载父类的某个虚函数glog可以自定义消息格式,详见ros_log_sink