CMakeLists&Makefile

本文通过具体示例对比展示了如何使用CMakeLists.txt及Makefile进行项目的构建配置。包括了从源文件到可执行文件的整个过程,适用于初学者快速上手。

一、CMakeLists

main.cpp

#include<iostream>
using namespace std;
int main()
{
    cout<<"hello cmake"<<endl;
    return 0;
}

CMakeLists.txt

#cmake版本
cmake_minimum_required(VERSION 2.8)
#项目名字
project(cmakedemo)
#源程序给变量DIR_SRC
aux_source_directory(./ DIR_SRC )
#生成程序
add_executable(cmakedemo ${DIR_SRC})

参考:

http://blog.youkuaiyun.com/flydreamforever/article/details/65454018

二、Makefile

main.cpp

#include<iostream>
using namespace std;
int main()
{
    cout<<"hello make"<<endl;
    return 0;
}

Makefile

#编译器
cc = g++
#工程名/目标
prom = makedemo
#源文件/依赖关系
deps = $(shell find ./ -name "*.h")
src = $(shell find ./ -name "*.cpp")
#目标文件
obj = $(src:%.c=%.o) 

#命令部分
$(prom): $(obj)
	$(cc) -o $(prom) $(obj)

%.o: %.c $(deps)
	$(cc) -c $< -o $@
clean:
	rm -rf $(obj) $(prom)
参考:

https://www.cnblogs.com/owlman/p/5514724.html

http://blog.youkuaiyun.com/Jeanphorn/article/details/52400246

demo(CMakeLists&Makefile)

rror: ‘amp’ was not declared in this scope 17 | "/camera/image", 10, std::bind(&amp;ImageSubscriber::image_callback, this, _1)); | ^~~ /home/lizhuo/ros2_ws/image_subscriber_cpp/src/image_subscriber.cpp:17:60: error: invalid use of non-static member function ‘void ImageSubscriber::image_callback(sensor_msgs::msg::Image_<std::allocator<void> >::SharedPtr) const’ 17 | "/camera/image", 10, std::bind(&amp;ImageSubscriber::image_callback, this, _1)); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~ /home/lizhuo/ros2_ws/image_subscriber_cpp/src/image_subscriber.cpp:22:8: note: declared here 22 | void image_callback(const sensor_msgs::msg::Image::SharedPtr msg) const | ^~~~~~~~~~~~~~ /home/lizhuo/ros2_ws/image_subscriber_cpp/src/image_subscriber.cpp: In member function ‘void ImageSubscriber::image_callback(sensor_msgs::msg::Image_<std::allocator<void> >::SharedPtr) const’: /home/lizhuo/ros2_ws/image_subscriber_cpp/src/image_subscriber.cpp:31:33: error: ‘process_image’ was not declared in this scope; did you mean ‘processed_image’? 31 | cv::Mat processed_image = process_image(image); | ^~~~~~~~~~~~~ | processed_image /home/lizhuo/ros2_ws/image_subscriber_cpp/src/image_subscriber.cpp:37:36: error: expected ‘)’ before ‘;’ token 37 | catch (cv_bridge::Exception&amp; e) | ^ /home/lizhuo/ros2_ws/image_subscriber_cpp/src/image_subscriber.cpp:37:11: note: to match this ‘(’ 37 | catch (cv_bridge::Exception&amp; e) | ^ /home/lizhuo/ros2_ws/image_subscriber_cpp/src/image_subscriber.cpp:37:36: error: expected ‘{’ before ‘;’ token 37 | catch (cv_bridge::Exception&amp; e) | ^ /home/lizhuo/ros2_ws/image_subscriber_cpp/src/image_subscriber.cpp:37:38: error: ‘e’ was not declared in this scope 37 | catch (cv_bridge::Exception&amp; e) | ^ gmake[2]: *** [CMakeFiles/image_subscriber.dir/build.make:76:CMakeFiles/image_subscriber.dir/src/image_subscriber.cpp.o] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:137:CMakeFiles/image_subscriber.dir/all] 错误 2 gmake: *** [Makefile:146:all] 错误 2 --- Failed <<< image_subscriber_cpp [4.89s, exited with code 2] Summary: 0 packages finished [5.09s] 1 package failed: image_subscriber_cpp 1 package had stderr output: image_subscriber_cpp not found: "/home/lizhuo/ros2_ws/install/image_subscriber_cpp/share/image_subscriber_cpp/local_setup.bash"#include <rclcpp/rclcpp.hpp> #include <sensor_msgs/msg/image.hpp> #include <cv_bridge/cv_bridge.h> #include <opencv2/opencv.hpp> using std::placeholders::_1; class ImageSubscriber : public rclcpp::Node { public: ImageSubscriber() : Node("image_subscriber") { // 订阅话题,根据实际bag中的话题名修改 subscription_ = this->create_subscription<sensor_msgs::msg::Image>( "/camera/image", 10, std::bind(&amp;ImageSubscriber::image_callback, this, _1)); RCLCPP_INFO(this->get_logger(), "图像订阅器已启动,等待消息..."); } private: void image_callback(const sensor_msgs::msg::Image::SharedPtr msg) const { try { // 将ROS图像消息转换为OpenCV图像 cv_bridge::CvImagePtr cv_ptr = cv_bridge::toCvCopy(msg, "bgr8"); cv::Mat image = cv_ptr->image; // 在此添加图像处理代码 cv::Mat processed_image = process_image(image); // 显示图像 cv::imshow("Bag Image", processed_image); cv::waitKey(1); // 等待1ms,允许OpenCV刷新窗口 } catch (cv_bridge::Exception&amp; e) { RCLCPP_ERROR(this->get_logger(), "cv_bridge异常: %s", e.what()); } } rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr subscription_; }; int main(int argc, char * argv[]) { rclcpp::init(argc, argv); auto node = std::make_shared<ImageSubscriber>(); rclcpp::spin(node); rclcpp::shutdown(); cv::destroyAllWindows(); return 0; } x修改
最新发布
08-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coplin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值