5、开发环境-使用Webots的Makefiles文件

发布时间 2023-07-27 11:39:03作者: gary_123

一、使用Makefiles

Makefiles是什么

Webots C/C++和Java控制器的编译可以在提供的Makefile中进行配置。控制器的Makefile是make实用程序使用的配置文件,它可以选择指定源文件的列表,以及如何编译和链接源文件以创建可执行程序。


请注意,Python和MATLABTM是解释语言,因此它们不需要Makefile。因此,如果您正在使用这些编程语言或Visual Studio中的任何一种,则可以忽略此部分。


当使用C/C++或Java时,在控制器目录中存在Makefile是必要的。如果Makefile丢失,Webot将自动建议创建一个。这个Makefile可以用文本编辑器进行修改;其目的是定义特定于项目的变量,并包含全局“Makefile.include”文件。全局“Makefile.include”文件存储在“WEBOTS_HOME/resources/”目录中;它包含有效的构建规则,并且可能因Webots版本而异。请注意,Webots Makefile是独立于平台和语言的。

具有多个源文件的控制器(C/C++)

如果一个控制器需要几个C/C++源文件,则需要在Makefile中指定它们。必须使用以下变量之一列出每个源文件的名称:

C_SOURCES:指定一些列的.c源文件

CXX_SOURCES:指定一些列的.cpp,.cc,.c++源文件

使用这些变量指定的每个源文件都将添加到控制器构建中。此外,make命令将自动生成依赖文件,以最大限度地减少构建。请注意,这些变量不应在C或C++以外的任何语言中使用。

例如,如果一个控制器有几个“.c”源文件,那么可以在控制器的Makefile中这样指定:

C_SOURCES = my_controller.c my_second_file.c my_third_file.c

如果一个项目有几个“.cpp”源文件,那么可以这样指定:

CXX_SOURCES = my_controller.cpp my_second_file.cpp my_third_file.cc

重要提示:生成规则要求列表中的一个源文件必须与控制器名称(即控制器目录名)相对应,例如,如果控制器目录为“my_controller”,则列表必须相应地包含“my_concontroller.c、my_controler.cpp”或“my_conController.cc”

适应编译器和连接器标志

CFLAGS:指定将传递给gcc/g++编译器的标志列表;

LFLAGS:指定将传递给链接器的标志列表;

INCLUDE:指定要添加到gcc/g++编译器为包含文件搜索的位置列表中的目录;

LIBRARIES:指定库搜索目录和传递给链接器的库

在C++控制器中使用Webots C API

通常,C++控制器使用Webots C++API。C++API是由C++头文件提供的一组C++类,例如#include<webots/Robot.hpp>。如果愿意,C++控制器可以改用webots C API。C API是一组以wb前缀开头的C函数,由C头文件提供,例如#include<webots/robot.h>。要在C++控制器中使用C API,需要在控制器Makefile中添加此行:

USE_C_API = true

 

详细编译

通过在控制器Makefile中将VERBOSE变量设置为非空值,可以显示有关已执行命令序列的详细信息:

VERBOSE = 1

添加调试信息

如果需要调试控制器,则需要使用终端的调试目标重新编译控制器

make debug