[Toolschain cpp ros cmakelist python vscode] 记录写每次项目重复的设置和配置 不断更新

文章讲述了如何使用CMake进行项目配置,包括复用cmakeLists、处理find_package库搜索、设置包含目录和链接库,以及在VSCode中配置C++开发环境,如头文件搜索、调试ROS节点和Git管理。
摘要由CSDN通过智能技术生成

写在前面

用以前的设置,快速配置项目,以防长久不用忘记,部分资料在资源文件里还没有整理

outline

  • cmakelist 复用
  • vscode 找到头文件
  • vscode debug
  • 现有代码直接关联远端git
  • ros杂记
  • repo 杂记
  • glog杂记

update

  • 12 22 更新了复用的cmaklist,加入了手动找库的两种方式
    • 用 include dir 和 add library直接add 顺便把yaml写进取以后我写工程直接复制
    • set 一个宏

cmakelist 复用

包含了根据系统路径找库,debug,主动set库路径,单元测试用,和常用的加入头文件与源文件




cmake_minimum_required(VERSION 3.14.1)
project(project_Planner)
set( CMAKE_CXX_STANDARD 11 )
set( CMAKE_CXX_STANDARD_REQUIRED ON )
set( THREADS_PREFER_PTHREAD_FLAG ON )

function(include_sub_directories_recursively root_dir)
    if (IS_DIRECTORY ${root_dir})
        include_directories(${root_dir})
        file(GLOB children RELATIVE ${root_dir} ${root_dir}/*)
        foreach(child ${children})
            if (IS_DIRECTORY ${root_dir}/${child})
                include_sub_directories_recursively(${root_dir}/${child})
            endif()
        endforeach()
    endif()
endfunction()

function(aux_source_directory_recursively root_dir var_name)
    if(IS_DIRECTORY ${root_dir})
        aux_source_directory(${root_dir} TMP_SRC_LIST)
        set(${var_name} ${${var_name}} ${TMP_SRC_LIST} PARENT_SCOPE)
        file(GLOB children RELATIVE ${root_dir} ${root_dir}/*)
        foreach(child ${children})
            if(IS_DIRECTORY ${root_dir}/${child})
                aux_source_directory_recursively(${root_dir}/${child} ${var_name}) 
            endif()
        endforeach()
    endif()
endfunction()


find_package(glog REQUIRED)
find_package(Eigen3 REQUIRED)
#find_package(osqp REQUIRED )
find_package(OsqpEigen REQUIRED)
find_package(yaml-cpp REQUIRED)

Set(GLOG_INCLUDE_DIRS "/usr/include/glog/")
Set(GLOG_LIBRARIES "/usr/lib/x86_64-linux-gnu/libglog.so")
#Set(GLOG_LIBRARIES "/usr/local/lib/libglog.so")

# message(STATUS "GLOG_INCLUDE_DIRS: ${GLOG_INCLUDE_DIR}")
# message(STATUS "GLOG_LIBRARIES: ${GLOG_LIBRARIES}")
# message(STATUS "EIGEN3_INCLUDE_DIR: ${EIGEN3_INCLUDE_DIR}")
# message(STATUS "EIGEN3_LIBRARIES: ${EIGEN3_LIBRARIES}")
# message(STATUS "osqp_INCLUDE_DIR: ${osqp_INCLUDE_DIR}")
# message(STATUS "osqp_LIBRARIES: ${osqp_LIBRARIES}")

set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC_LIST)
 aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src/. SRC_LIST)
 aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/commen/. SRC_LIST)

#aux_source_directory_recursively(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)
include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/libs)
include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/src)

##############################debug start##############################
get_property(include_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)

foreach(dir ${include_dirs})
    message("Include directory: ${dir}")
endforeach()

message("Source files:")
foreach(file IN LISTS SRC_LIST)
    message("  ${file}")
endforeach()
#################################debug end####################################

include_directories(${GLOG_INCLUDE_DIRS})
include_directories(${EIGEN3_INCLUDE_DIR})


add_executable(${PROJECT_NAME} ${SRC_LIST})
#add_library(${PROJECT_NAME} STATIC ${SRC_LIST}) # temp use 
target_include_directories(${PROJECT_NAME} PRIVATE ${GLOG_INCLUDE_DIRS})
#target_include_directories(${PROJECT_NAME} PRIVATE ${OSQP_INCLUDE_DIRS})
#target_link_libraries(${PROJECT_NAME} OsqpEigen::OsqpEigen)
target_link_libraries(${PROJECT_NAME} PRIVATE ${GLOG_LIBRARIES})
target_link_libraries(${PROJECT_NAME} PRIVATE ${EIGEN3_LIBRARIES})
target_link_libraries(${PROJECT_NAME} PRIVATE yaml-cpp)

# link_directories(${CMAKE_CURRENT_SOURCE_DIR}/libs/yaml-cpp/)# for all 
# target_link_libraries(${PROJECT_NAME} PRIVATE libyaml-cpp.a)
#target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/libs/yaml-cD/libyaml-cD.a)
#target_link_libraries(${PROJECT_NAME} PRIVATE osqp::osqp)
#####################################unit test ###################################
# add_executable(unit_test_pathFW ${SRC_LIST}) 
# target_link_libraries( unit_test_pathFW
#                         ${GLOG_LIBRARIES}
#                         # ${CMAKE_CURRENT_SOURCE_DIR}/libs/yaml-cD/libyaml-cD.a
#                         ${CMAKE_CURRENT_SOURCE_DIR}/libs/yaml-cD/libyaml-cD.a
#                         # yaml-cD
#                         )
#####################################unit test end#################################







备注:target_include_directories 用于为特定目标设置包含目录,而 include_directories 用于设置项目中所有目标的全局包含目录,add_library为直接加入库路径
这里写了更多find package 找不到库的细节处理https://blog.csdn.net/weixin_46479223/article/details/135153942

vscode 找头文件

之前使用visual studio 感觉在这一点上 更方便,如果vscode 要配置一下 。
新建:c_cpp_properties.json 或者 ctrl +shift+ p在设置中查找 configuration (json),但也可以ui方式直接设置
在这里插入图片描述

{
"configurations": [
{
"browse": {
"databaseFilename": "${default}",
"limitSymbolsToIncludedHeaders": false
},
"includePath": [
"/home/kaifengqu/Desktop/H06CodeinROSEnv/devel/include/**",
"/opt/ros/noetic/include/**",
"/home/kaifengqu/Desktop/H06CodeinROSEnv/src/**",
"/usr/include/**"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "c++14"
}
],
"version": 4
}

vscode debug




{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build_t/project_MPtest
",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }

    ]
}
# 使用ros的方式
1 Vscode 安装ros插件 还是需要添加一下launch配置

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "ROS: Attach",
            "type": "ros",
            "request": "attach"
        }

    ]
}
2设置断点,运行节点,回放数据
3使用调试与运行中 ROS Attach 查找ID 或进程名称,将可执行文件(NODE)附加到进程里。

如果不是用ros(有一个问题无法暂停数据的播放)也要配置debuggdb
{
// 使用 IntelliSense 了解相关属性。 
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/project_PPconrtoller",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}

]
}

现有代码直接关联远端git

echo "# Scripts" >> README.md
git init
git config --global user.email "kaifeng_quu@163.com"
git config --global user.name "kaifeng" //第一次用
git add README.md
git commit -m "first commit"
git branch -M main # 改不改名字都可以
git remote add origin git@github.com:HerrQQ/Scripts.git # 从git复制
git push -u origin main # 如果不着急推送 就git branch -u origin/master

# 完事了 git remote -v 䁖一眼

ros 杂记

脚本更改
rosrun pilot_controller modifyForRos.py 
分析工具
  rosrun plotjuggler plotjuggler
记录
rosbag record -O recorded_data -a
启动节点
roslaunch pilot_controller pilot_controller_ha1.launch 

找节点关闭
pidof program_name 

pkill -f feishu

回放
rqt_bag

编译
catkin_make -j4 -DCMAKE_BUILD_TYPE=Debug

plotjuggler缺东西问题

使用sudo apt install ros-noetic-plotjuggler-ros一键安装plotjuggler及其ros插件

repo 杂记

https://blog.csdn.net/weixin_48120109/article/details/128272613 讲解repo具体用法
https://blog.csdn.net/KIK9973/article/details/118755045 haoyong nice to use

    1. 初始化: 使用 repo init 命令初始化 repo,在后面添加 -u 参数,并指明源的 URL。例如:
repo init -u https://android.googlesource.com/platform/manifest
可以添加 -b 参数来切换到不同的分支,比如 -b android-4.0.1_r1。
同步: 使用 repo sync 命令将所有相关的 git 仓库同步到本地。可以添加 仓库名 参数来单独同步某一个仓库,否则默认同步全部。例如:
repo sync
同步特定仓库:
repo sync project_name
查看状态:使用 repo status 命令来查看所有 git 仓库的状态。
开始工作: 在开始对任何仓库做出修改之前,建议先使用 repo start 创建一个新的分支:
repo start my_branch my_project
1. 提交: 分别在每个 git 仓库中添加和提交更改,然后使用 repo upload 上传更改。
更多关于 repo 使用的命令和详细说明,可以通过在控制台输入 repo -h 查看。

Glog杂记

#include <glog/logging.h>
int main(int argc, char* argv[])
google::InitGoogleLogging(argv[0]);
google::SetStderrLogging(google::GLOG_ERROR); 
FLAGS_colorlogtostderr = true;

FLAGS_logtostderr = false;  // 将日志输出到日志文件
FLAGS_minloglevel = 2;      // 设置最小日志级别为 ERROR
FLAGS_log_dir = "/path/to/logs";  // 设置日志文件的输出目录
LOG(INFO) << "Hello,GLOG!";
google::ShutdownGoogleLogging();//当要结束glog时必须关闭库,否则会内存溢出
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ROS (机器人操作系统) 是一个开源的、用于构建机器人应用软件的框架。PythonROS 中常用的编程语言之一,VS Code 则是一种广泛使用的集成开发环境。 在使用 VS Code 进行 ROS Python 调试时,需要按照以下步骤进行设置: 1. 安装 ROS 扩展:在 VS Code 中打开扩展视图,搜索并安装 "ROS" 扩展。 2. 创建工作空间:在 VS Code 中创建一个文件夹,并打开该文件夹作为你的 ROS 项目的工作空间。 3. 设置工作空间:在 VS Code 中使用快捷键 "Ctrl + Shift + P" 调出命令面板,输入 "ROS: Set Workspaces" 并选择 "ROS: Set Workspace",然后选择你的工作空间文件夹。 4. 创建 launch 文件:在工作空间中创建一个 launch 文件,该文件将用于启动 ROS 节点并配置调试器。 5. 在 launch 文件中添加调试配置:在 launch 文件中添加一个节点配置,包括节点名称、节点类型和节点参数等信息,以便 VS Code 在调试时能正确启动节点。 6. 设置断点:在你的 Python 代码中选择需要设置断点的行,并在调试器视图中点击左边的行号。这样当节点运行到这行时,调试器将会暂停执行。 7. 启动调试:在工作空间中打开 `.vscode/launch.json` 配置文件,在节点配置中添加 `"request": "launch"` 字段。然后按下 F5 键或在调试菜单中选择启动调试,VS Code 将会连接 ROS 节点并进行调试。 8. 调试过程中的操作:在调试过程中,你可以使用调试器界面中的控件,如继续、暂停、下一步、单步跳入、单步跳过等,来控制代码的执行流程和查看变量的值等信息。 通过以上步骤,你可以在 VS Code 中使用调试器来调试你的 ROS Python 代码,以便更好地理解和修复代码中的错误和问题。 ### 回答2: 在使用ROSPythonVSCode进行调试时,我们可以按照以下步骤进行操作: 1. 安装ROS:首先,确保已正确安装并配置ROS开发环境。在安装完成后,可以使用`roscd`命令进入ROS工作空间。 2. 安装VSCode:从VSCode的官方网站上下载并安装VSCode;然后,安装ROS插件,如"ROS"、"Python"和"Remote - Containers"等。 3. 创建工作空间:打开VSCode,点击"打开文件夹",然后选择ROS工作空间的路径。VSCode会自动加载ROS插件以支持ROS功能。 4. 创建和编辑ROS节点:在VSCode中,打开一个新的终端并导航到ROS工作空间。使用ROS命令创建和运行ROS节点,比如`rosrun <package_name> <node_name>`。 5. 编Python代码:在VSCode中创建或编辑Python代码文件,实现ROS节点的功能。在代码中,可以使用ROS提供的Python库来访问ROS消息、服务和参数等。 6. 配置调试器:在VSCode中,点击"调试"选项卡,然后在调试配置文件中选择"Python"。这将创建一个新的"launch.json"文件。 7. 配置调试选项:在"launch.json"文件中,配置调试器的选项,指定要运行和调试的Python脚本、启动节点的参数等。 8. 运行和调试:点击调试工具栏中的"开始调试"按钮,VSCode将运行ROS节点并自动启动调试器。可以设置断点、观察变量、单步执行等操作来调试代码。 9. 观察输出:在VSCode的"调试控制台"中,可以看到ROS节点的输出信息,包括ROS消息、调试信息等。可以使用打印语句或ROS的日志库来记录输出。 10. 停止调试:调试完成后,点击调试工具栏中的"停止"按钮,停止ROS节点的运行和调试会话。 总结,使用VSCode进行ROSPython的调试是一种便捷的方法。通过正确设置调试配置文件,我们可以轻松地调试ROS节点并观察输出信息,提高调试效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值