小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
C++节点 make函数报错
-
为什么在输入查找和添加依赖的指令后,make指令还会报错?
cmake_minimum_required(VERSION 3.8)
project (ros2_cpp)
add_executable(ros2_cpp_node ros2_cpp_node.cpp)find_package(rclcpp REQUIRED)
target_include_directories(ros2_cpp_node PUBLIC ${rclcpp_INCLUED_DIRS})
target_link_libraries(ros2_cpp_node ${rclcpp_LIBRARIES})错误如下:
zzz@study01:~/chart2$ make
[ 50%] Building CXX object CMakeFiles/ros2_cpp_node.dir/ros2_cpp_node.cpp.o
/home/zzz/chart2/ros2_cpp_node.cpp:1:10: fatal error: rclcpp/rclcpp.hpp: 没有那个文件或目录
1 | #include "rclcpp/rclcpp.hpp"
| ^~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/ros2_cpp_node.dir/build.make:76:CMakeFiles/ros2_cpp_node.dir/ros2_cpp_node.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:85:CMakeFiles/ros2_cpp_node.dir/all] 错误 2
make: *** [Makefile:101:all] 错误 2 -
根据你提供的错误信息和CMakeLists.txt文件,问题出现在几个方面:
-
CMakeLists.txt中的错误:
find_package
应该是find_package(REQUIRED COMPONENTS ...)
的形式,但在ROS 2中通常使用find_package(REQUIRED CONFIG)
来查找包配置文件,随后使用ament_target_dependencies
来添加依赖。- 变量名错误:
${rclcpp_INCLUED_DIRS}
应该是${rclcpp_INCLUDE_DIRS}
。
-
正确的CMakeLists.txt设置:
对于ROS 2项目,CMakeLists.txt应该类似于以下格式:cmake_minimum_required(VERSION 3.5) project(ros2_cpp) # 查找ament_cmake(ROS 2的构建系统) find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) # 添加可执行文件 add_executable(ros2_cpp_node src/ros2_cpp_node.cpp) # 添加依赖 ament_target_dependencies(ros2_cpp_node rclcpp) # 包含rclcpp的头文件目录(通常ament_target_dependencies会自动处理,但显式添加也无妨) target_include_directories(ros2_cpp_node PRIVATE ${rclcpp_INCLUDE_DIRS}) # 链接库(通常ament_target_dependencies会自动处理,但显式添加也无妨) target_link_libraries(ros2_cpp_node PRIVATE ${rclcpp_LIBRARIES}) # 安装目标 install(TARGETS ros2_cpp_node DESTINATION lib/${PROJECT_NAME}) ament_package()
注意几点:
- 使用
ament_target_dependencies
来添加依赖,这是ROS 2推荐的方式。 - 确保
add_executable
中的源文件路径正确(这里假设源文件在src
目录下)。 - 使用
PRIVATE
或PUBLIC
关键字来指定包含目录和链接库的可见性。
- 使用
-
构建问题:
- 确保你已经正确安装了ROS 2,并且环境变量(如
COLCON_PREFIX_PATH
或AMENT_PREFIX_PATH
)已经设置,以便CMake可以找到ROS 2的安装位置。 - 使用
colcon build
而不是make
来构建ROS 2项目,因为ROS 2推荐使用colcon
作为构建系统。
- 确保你已经正确安装了ROS 2,并且环境变量(如
-
使用colcon构建:
- 在项目根目录下(包含CMakeLists.txt的目录),运行:
colcon build
- 这将处理依赖关系,编译代码,并生成可执行文件。
- 在项目根目录下(包含CMakeLists.txt的目录),运行:
通过以上步骤,你应该能够解决编译问题。如果仍然遇到问题,请检查ROS 2是否安装正确,以及所有相关的环境变量是否设置正确。
以上为生成回答,仅供参考~
-
-
@1334576388 cmake 先
-
@小鱼 搞定了,我配置了一下环境之后就又可以了