proto_cmake_test

2023-05-16

proto_cmake_test

Proto与CMAKE结合编译源代码

工程编译

cd build
cmake ..
make
ls message/*

在message目录下生成cc和h文件

三种CMakelists编写方式

  • 第一种

    cmake_minimum_required(VERSION 2.6)
     
    project(proto_cmake_test)
     
    add_definitions(-std=c++11)
     
    find_package(Protobuf REQUIRED)
    find_package(Threads)
    
    if(PROTOBUF_FOUND)
       message(STATUS "protobuf library found")
    else()
        message(FATAL_ERROR "protobuf library is needed but cant be found")
    endif()
    
    
    #endif()
    
     
    
    # 设置编译阶段头文件路径
    include_directories(    ${CMAKE_CURRENT_BINARY_DIR}
                            ${PROTOBUF_INCLUDE_DIRS}
                            "/usr/include/")
    # 设置链接截断库文件路径
    link_directories(   /usr/lib/x86_64-linux-gnu/ 
                        #${EIGEN3_LIBRARY_DIRS}
                        )
    
    # 找到所有需要编译的.proto文件
    file(GLOB PROTO_FILES ${PROJECT_SOURCE_DIR}/proto/*.proto)
    message(STATUS "1-- ${PROTO_FILES}")
    # 法一:要求protobuf_generate_cpp命令和生成add_executable() 或 add_library() 的命令必须在同一个CMakeList中.
    ## PROTO_SRC,PROTO_HARS变量分别指代生成的cpp和h文件并可用于连接到target和设置include
    set(PROTOBUF_GENERATE_CPP_APPEND_PATH ON) # required for tensorflow
    protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})
    ## 生成动态库
    add_library(proto_lib STATIC ${PROTO_SRCS} ${PROTO_HDRS})
    ## 与C++文件一起编译生成可执行文件
    #add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
    #target_link_libraries(bar ${Protobuf_LIBRARIES})
    
  • 第二种

    cmake_minimum_required(VERSION 2.6)
     
    project(proto_cmake_test)
     
    add_definitions(-std=c++11)
     
    find_package(Protobuf REQUIRED)
    find_package(Threads)
    
    if(PROTOBUF_FOUND)
       message(STATUS "protobuf library found")
    else()
        message(FATAL_ERROR "protobuf library is needed but cant be found")
    endif()
    
    
    #endif()
    
     
    
    # 设置编译阶段头文件路径
    include_directories(    ${CMAKE_CURRENT_BINARY_DIR}
                            ${PROTOBUF_INCLUDE_DIRS}
                            "/usr/include/")
    # 设置链接截断库文件路径
    link_directories(   /usr/lib/x86_64-linux-gnu/ 
                        #${EIGEN3_LIBRARY_DIRS}
                        )
    
    
    # 法二:这种方法仍然存在缺点:每次执行cmake后,都会重新生成proto源码,导致make时会因为源码变动(内容未变,只是重新生成)而重新编译程序
    #设置输出路径
    SET(MESSAGE_DIR ${CMAKE_BINARY_DIR}/message)
    if(EXISTS "${CMAKE_BINARY_DIR}/message" AND IS_DIRECTORY "${CMAKE_BINARY_DIR}/message")
        SET(DST_DIR ${MESSAGE_DIR})
    else()
        file(MAKE_DIRECTORY ${MESSAGE_DIR})
        SET(DST_DIR ${MESSAGE_DIR})
    endif()
    
    #设置protoc的搜索路径:在其中搜索导入(import)的目录。可指定多次
    LIST(APPEND PROTO_FLAGS -I${CMAKE_SOURCE_DIR}/proto)
    
    #获取需要编译的proto文件
    file(GLOB_RECURSE MSG_PROTOS ${CMAKE_SOURCE_DIR}/proto/*.proto)
    
    set(PROTO_SRCS "")
    set(PROTO_HDRS "")
    foreach(msg ${MSG_PROTOS})
        get_filename_component(FIL_WE ${msg} NAME_WE)
        # 获取源码头文件和cpp文件路径
        list(APPEND PROTO_SRCS "${DST_DIR}/${FIL_WE}.pb.cc")
        list(APPEND PROTO_HDRS "${DST_DIR}/${FIL_WE}.pb.h")
        # 生成源码:protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
        execute_process(COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTO_FLAGS} --cpp_out=${DST_DIR} ${msg})
    endforeach()
    # 设置生成的源码文件属性GENERATED为TRUE,否则cmake时会因找不到源码而报错
    set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS} PROPERTIES GENERATED TRUE)
    ## 与C++文件一起编译生成可执行文件
    #add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
    #target_link_libraries(bar ${Protobuf_LIBRARIES})
    
  • 第三种

cmake_minimum_required(VERSION 2.6)
 
project(proto_cmake_test)
 
add_definitions(-std=c++11)
 
find_package(Protobuf REQUIRED)
find_package(Threads)

if(PROTOBUF_FOUND)
   message(STATUS "protobuf library found")
else()
    message(FATAL_ERROR "protobuf library is needed but cant be found")
endif()


#endif()

 

# 设置编译阶段头文件路径
include_directories(    ${CMAKE_CURRENT_BINARY_DIR}
                        ${PROTOBUF_INCLUDE_DIRS}
                        "/usr/include/")
# 设置链接截断库文件路径
link_directories(   /usr/lib/x86_64-linux-gnu/ 
                    #${EIGEN3_LIBRARY_DIRS}
                    )
# 法三:使用add_custom_target与add_custom_command生成源码
#设置输出路径
SET(MESSAGE_DIR ${CMAKE_BINARY_DIR}/message)
if(EXISTS "${CMAKE_BINARY_DIR}/message" AND IS_DIRECTORY "${CMAKE_BINARY_DIR}/message")
    SET(DST_DIR ${MESSAGE_DIR})
else()
    file(MAKE_DIRECTORY ${MESSAGE_DIR})
    SET(DST_DIR ${MESSAGE_DIR})
endif()
#设置protoc的搜索路径:在其中搜索导入(import)的目录。可指定多次
LIST(APPEND PROTO_FLAGS -I${CMAKE_SOURCE_DIR}/proto)
#获取需要编译的proto文件
file(GLOB_RECURSE MSG_PROTOS ${CMAKE_SOURCE_DIR}/proto/*.proto)
set(PROTO_SRCS "")
set(PROTO_HDRS "")
foreach(msg ${MSG_PROTOS})
    get_filename_component(FIL_WE ${msg} NAME_WE)
    # 获取源码头文件和cpp文件路径
    list(APPEND PROTO_SRCS "${PROJECT_BINARY_DIR}/message/${FIL_WE}.pb.cc")
    list(APPEND PROTO_HDRS "${PROJECT_BINARY_DIR}/message/${FIL_WE}.pb.h")
    # 使用自定义命令
    add_custom_command(
          OUTPUT "${DST_DIR}/${FIL_WE}.pb.cc"
                 "${DST_DIR}/${FIL_WE}.pb.h"
          COMMAND  ${PROTOBUF_PROTOC_EXECUTABLE}
          ARGS --cpp_out  ${DST_DIR}
            ${PROTO_FLAGS}
            ${msg}
          DEPENDS ${msg}
          COMMENT "Running C++ protocol buffer compiler on ${msg}"
          VERBATIM
        )
endforeach()

# 设置文件属性为 GENERATED:设置生成的源码文件属性GENERATED为TRUE,否则cmake时会因找不到源码而报错
set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS} PROPERTIES GENERATED TRUE)
# 添加自定义target:使用add_custom_target添加目标时要设置ALL关键字,否则target将不在默认编译列表中
add_custom_target(generate_message ALL
    DEPENDS ${PROTO_SRCS} ${PROTO_HDRS}
    COMMENT "generate message target"
    VERBATIM)
## 与C++文件一起编译生成可执行文件
#add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
#target_link_libraries(bar ${Protobuf_LIBRARIES})
  • 第四种
cmake_minimum_required(VERSION 2.6)

project(Radar)

add_definitions(-std=c++11)


#find_package(Eigen3 REQUIRED)
find_package(OpenCV REQUIRED )
find_package(yaml-cpp REQUIRED)
find_package(Protobuf REQUIRED)
find_package(Threads)
find_package(PCL REQUIRED)

if(PROTOBUF_FOUND)
  message(STATUS "protobuf library found")
else()
   message(FATAL_ERROR "protobuf library is needed but cant be found")
endif()

#if(Eigen3)
#   message(STATUS "Eigen3 library found")
#   message(STATUS "Find Eigen3 include at ${EIGEN3_INCLUDE_DIR}")
#else()
#    message(FATAL_ERROR "Eigen3 library is needed but cant be found")
#endif()

#if(OpenCV)
#   message(STATUS "OpenCV library found")
#else()
#    message(FATAL_ERROR "OpenCV library is needed but cant be found")
#    message(STATUS "Find OpenCV include at ${OpenCV_INCLUDE_DIRS}")
#endif()



# 设置编译阶段头文件路径
include_directories(    ${CMAKE_CURRENT_BINARY_DIR}
                       #${EIGEN3_INCLUDE_DIR} 
                       ${YAML_CPP_INCLUDE_DIR} 
                       ${OpenCV_INCLUDE_DIRS}
                       ${PROTOBUF_INCLUDE_DIRS}
                       ${PCL_INCLUDE_DIRS}
                       ${CMAKE_CURRENT_BINARY_DIR}
                       ${CMAKE_BINARY_DIR}
                       ${CMAKE_BINARY_DIR}/message
                       "/usr/include/eigen3"
                       "/home/hegaozhi/ly/apollo/modules/perception/onboard"
                       "/home/hegaozhi/ly/apollo/modules/perception/"
                       "${CMAKE_SOURCE_DIR}/radar/modest"
                       "/usr/include/")
# 设置链接截断库文件路径
link_directories(   /usr/lib/x86_64-linux-gnu/ 
                   #${EIGEN3_LIBRARY_DIRS} 
                   ${OpenCV_LIBRARY_DIRS}
                   ${PROTOBUF_LIBRARY_DIRS}
                   ${PCL_LIBRARY_DIRS}
                   )




# PROTO_META_BASE_DIR为编译之后生成文件的目录。
#SET(PROTO_META_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR})
# PROTO_FLAGS很重要,指定编译.proto文件时的总的寻找路径,.proto中的import命令根据根据这个地址去连接其他的.proto文件
#LIST(APPEND PROTO_FLAGS -I${CMAKE_CURRENT_SOURCE_DIR})   




#[[ 
# 找到所有需要编译的.proto文件
file(GLOB PROTO_FILES ${PROJECT_SOURCE_DIR}/proto/*.proto)
message(STATUS "1-- ${PROTO_FILES}")
# 法一:要求protobuf_generate_cpp命令和生成add_executable() 或 add_library() 的命令必须在同一个CMakeList中.
## PROTO_SRC,PROTO_HARS变量分别指代生成的cpp和h文件并可用于连接到target和设置include
set(PROTOBUF_GENERATE_CPP_APPEND_PATH ON) # required for tensorflow
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})
## 生成动态库
add_library(proto_lib STATIC ${PROTO_SRCS} ${PROTO_HDRS})
## 与C++文件一起编译生成可执行文件
#add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
#target_link_libraries(bar ${Protobuf_LIBRARIES})
]]

#[[ 
# 法二:这种方法仍然存在缺点:每次执行cmake后,都会重新生成proto源码,导致make时会因为源码变动(内容未变,只是重新生成)而重新编译程序
#设置输出路径
SET(MESSAGE_DIR ${CMAKE_BINARY_DIR}/message)
if(EXISTS "${CMAKE_BINARY_DIR}/message" AND IS_DIRECTORY "${CMAKE_BINARY_DIR}/message")
   SET(DST_DIR ${MESSAGE_DIR})
else()
   file(MAKE_DIRECTORY ${MESSAGE_DIR})
   SET(DST_DIR ${MESSAGE_DIR})
endif()

#设置protoc的搜索路径:在其中搜索导入(import)的目录。可指定多次
LIST(APPEND PROTO_FLAGS -I${CMAKE_SOURCE_DIR}/proto)

#获取需要编译的proto文件
file(GLOB_RECURSE MSG_PROTOS ${CMAKE_SOURCE_DIR}/proto/*.proto)

set(PROTO_SRCS "")
set(PROTO_HDRS "")
foreach(msg ${MSG_PROTOS})
   get_filename_component(FIL_WE ${msg} NAME_WE)
   # 获取源码头文件和cpp文件路径
   list(APPEND PROTO_SRCS "${DST_DIR}/${FIL_WE}.pb.cc")
   list(APPEND PROTO_HDRS "${DST_DIR}/${FIL_WE}.pb.h")
   # 生成源码:protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
   execute_process(COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTO_FLAGS} --cpp_out=${DST_DIR} ${msg})
endforeach()
# 设置生成的源码文件属性GENERATED为TRUE,否则cmake时会因找不到源码而报错
set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS} PROPERTIES GENERATED TRUE)
## 与C++文件一起编译生成可执行文件
#add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
#target_link_libraries(bar ${Protobuf_LIBRARIES})
]]



# 法三:使用add_custom_target与add_custom_command生成源码
#设置输出路径
SET(MESSAGE_DIR ${CMAKE_BINARY_DIR}/message)
if(EXISTS "${CMAKE_BINARY_DIR}/message" AND IS_DIRECTORY "${CMAKE_BINARY_DIR}/message")
  SET(DST_DIR ${MESSAGE_DIR})
else()
  file(MAKE_DIRECTORY ${MESSAGE_DIR})
  SET(DST_DIR ${MESSAGE_DIR})
endif()


#设置protoc的搜索路径:在其中搜索导入(import)的目录。可指定多次
LIST(APPEND PROTO_FLAGS -I${CMAKE_SOURCE_DIR}/proto)
#获取需要编译的proto文件
file(GLOB_RECURSE MSG_PROTOS proto/common/*.proto )
set(PROTO_SRCS "")
set(PROTO_HDRS "")
foreach(msg ${MSG_PROTOS})

  # 获取'文件名'的'特定'部分
  get_filename_component(FIL_WE ${msg} NAME_WE)
  # 获取路径
  get_filename_component(PATH_WE ${msg} DIRECTORY)
  # 设置编译proto生成文件所在路径
  string(REPLACE "/" ";" protoName ${PATH_WE})
  string(REPLACE "/" ";" projectName ${PROJECT_SOURCE_DIR})
  foreach(tmp ${projectName})
      list(REMOVE_AT protoName 1 )      
  endforeach()
  SET(PROTO_PATH "${PROJECT_BINARY_DIR}/message")
  foreach(tmp ${protoName})    
       SET(PROTO_PATH "${PROTO_PATH}/${tmp}")
  endforeach()
  SET(PROTO_SRCS_PATH "${PROTO_PATH}/${FIL_WE}.pb.cc")
  SET(PROTO_HDRS_PATH "${PROTO_PATH}/${FIL_WE}.pb.h")
  # 获取源码头文件和cpp文件路径
  list(APPEND PROTO_SRCS ${PROTO_SRCS_PATH})
  list(APPEND PROTO_HDRS ${PROTO_HDRS_PATH})
  # 使用自定义命令
  add_custom_command(
        OUTPUT ${PROTO_SRCS_PATH}
               ${PROTO_HDRS_PATH}
        COMMAND  ${PROTOBUF_PROTOC_EXECUTABLE}
        ARGS --cpp_out  ${DST_DIR}
          ${PROTO_FLAGS}
          ${msg}
        DEPENDS ${msg}
        COMMENT "Running C++ protocol buffer compiler on ${msg}"
        VERBATIM
      )
endforeach()

# 设置文件属性为 GENERATED:设置生成的源码文件属性GENERATED为TRUE,否则cmake时会因找不到源码而报错
set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS} PROPERTIES GENERATED TRUE)
# 添加自定义target:使用add_custom_target添加目标时要设置ALL关键字,否则target将不在默认编译列表中
add_custom_target(generate_message ALL
  DEPENDS ${PROTO_SRCS} ${PROTO_HDRS}
  COMMENT "generate message target"
  VERBATIM)
   

测试例子

源码下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

proto_cmake_test 的相关文章

  • 从非托管 C++ 创建 DLL

    我目前有一个用非托管 C 编写的控制台应用程序 源代码由一个入口点组成main以及其他一些功能 我需要从此代码创建一个 DLL 以便我可以从其他项目 特别是托管 C 使用它 另一个问题 我是否必须为此目的编写一个包装类 由于我对托管 非托管
  • 使用 Xcode 生成器配置特定的 add_custom_command

    我想创建一个自定义命令 使用 Apple 的将所有静态库合并到一个胖静态库中libtool构建期间的命令 我正在使用 Xcode 生成器和 CMake 3 19 1 我的脚本是这样的 set TARGET OUTPUT NAME CMAKE
  • 让 CMake 将生成的二进制文件与资产一起放入特定的目录结构中

    我的项目的目录结构基本如下 root src 根 资产 根 库 我目前已将 CMake 设置为编译源代码 编译库 然后通过从根目录调用 make 来链接它们 然后 我必须手动将可执行文件移动到原始资产目 录中以使其运行 因为这是它期望的位置
  • Gcc 卸载编译选项

    我正在尝试使用 Ubuntu 18 04 上的 gcc 10 CUDA 11 和此 CMakeLists txt 文件 或 OpenMP 版本 构建最简单的具有 GPU 卸载功能的 OpenMP 或 OpenACC C 程序 cmake m
  • Qt 5.7 将 -std=gnu++11 添加到我的编译器标志中,破坏 -std=c++14

    我在我的中设置以下标志CMakeLists txt set CMAKE CXX FLAGS std c 14 g O0 然后我正在使用find package定位Qt5Test find package Qt5Test REQUIRED 然
  • CMake 在 Windows 上找不到 wxWidgets

    我的 CMakeLists txt 中有以下代码片段 如中所述wxWidgets 维基 https wiki wxwidgets org CMake set wxWidgets ROOT DIR libs wxWidgets set wxW
  • 在Windows下使用通过MSYS2安装的cmake 3.5.2,缺少“MinGW Makefiles”生成器

    我正在尝试使用 MinGW 作为编译器 在 Windows 下进行 hello world 测试来制作 cmake 这个答案 https stackoverflow com a 4101496 4063051建议运行cmake与 G标志如下
  • 使用 CMake 添加仅标头依赖项

    我有一个简单的项目 需要三个仅头文件库才能编译 网络套接字 https github com zaphoyd websocketpp spdlog https github com gabime spdlog and 恩洛曼 json ht
  • CMake 未从 conan 中找到 boost 库

    所以我试图让我的 cmake 与 conan boost 一起工作 为此 我有一个简单的柯南文件 from conans import ConanFile class Boost Conan Cmake MinimalConfig Cona
  • Cmake 与 bitbake 配方

    我正在尝试用我自己的包构建 yocto 图像 我在 github 上有使用 cmake 的 OpenCV 代码 我试图为其编写一个食谱 但遇到了很多错误 任何人都可以提示我的食谱中应包含哪些功能或参数吗 我的食谱如下 DESCRIPTION
  • 如何向 CMake 添加自定义构建类型? (目标品牌)

    我正在尝试为我的 CMake 配置目标代码覆盖率添加自定义构建类型 到目前为止我尝试过的方法是CMake wiki 站点中有关它的常见问题解答条目 https gitlab kitware com cmake community wikis
  • CMake 库安装最佳实践

    我正在尝试使用 cmake 为共享库安装脚本 当我发现我想使用install 我不确定设置目的地的最佳做法是什么 此评论 https stackoverflow com a 10928305 258418 and various https
  • 强制 target_link_libraries 使用 C++ 链接器

    TL DR 将静态 c 库链接到 c 可执行文件时 有没有办法强制 cmake 使用 c 链接器 我有一个静态库 由 2 个对象组成 一个 C 文件和一个该文件中函数的 C 包装器 构造函数 析构函数和打印函数 类似于this https
  • 将 CMake 与具有钻石依赖项的库一起使用

    假设我有四个独立的项目 三是图书馆 Common Foo and Bar 其中之一是可执行文件 App Both Foo and Bar依赖于公共库 并且App依赖于取决于Foo and Bar 此外 其中一些项目有一些脚本需要运行来生成一
  • CMake 目标取决于已安装的目标

    我已经搜索过这个 但也许我使用了错误的措辞 我希望在安装另一个目标后构建一个 CMake 目标 举一个具体的例子 我希望我的测试包含库版本并与其链接 其目录结构类似于实际安装 目录结构 project lib first library h
  • CMake:如何标准化路径? [复制]

    这个问题在这里已经有答案了 是否有一种可靠的方法来标准化 CMake 中的路径 例子 Let s assume that an environment variable MY ROOT DIR is set that points to s
  • 调用always_inline‘_mm_mullo_epi32’时内联失败:目标特定选项不匹配

    我正在尝试使用 cmake 编译 C 程序 该程序使用 SIMD 内在函数 当我尝试编译它时 出现两个错误 usr lib gcc x86 64 linux gnu 5 include smmintrin h 326 1 错误 调用alwa
  • CMake+Xcode:应用程序存档失败,具体取决于同一解决方案中的库。在 BUILD_TREE 而不是 Xcode/DerivedData 中构建 Archive?

    几周前 我们移植了代码库以使用 CMake 进行构建管理 我们现在意识到 当我们试图做到这一点时 存在一个重大问题Archive依赖于同一 Xcode 解决方案中构建的一个 或多个 库的应用程序 链接器失败 因为它找不到所依赖的库 并且该库
  • 如何使用Cmake使用框架?

    对于 Macos 我想链接到一些框架 在 Windows 中 我想链接到一些库 比如OpenGL Framework 如何使用cmake表达这个需求 您可以尝试以下代码 target link libraries
  • 如何重新安装最新的cmake版本?

    我想在Linux环境下安装cmake的最新版本 我安装了 cmake 3 5 版 但某些应用程序不支持 我尝试通过卸载当前版本来升级它 但是当我使用 sudo apt get install cmake 重新安装时 我重新安装了相同的版本

随机推荐

  • 基于Qt、FFMpeg的音视频播放器设计三(Qt界面设计及OpenGL绘制视频)

    本部分总结了一下界面绘制和OpenGL绘制视频 xff0c 由于使用的是Qt的openGL xff0c 功能上没有那么复杂 xff0c 实现起来也比较简单 xff0c 毕竟人家已经给封好的 xff0c 完整的代码中使用OpenGL绘制视频
  • 基于Qt、FFMpeg的音视频播放器设计四(视频播放进度控制)

    上面介绍了如何使用opengl绘制视频和Qt的界面设计 xff0c 也比较简单 xff0c 现在我们看下如何控制视频播放及进度的控制 xff0c 内容主要分为以下几个部分 1 创建解码线程控制播放速度 2 通过Qt打开外部视频 3 视频总时
  • VS2008中Unicode编码转UTF-8编码

    今天在pc客户端传数据 Json格式 给服务端时 在存储到数据库 Mysql 时总是出现乱码现象 xff0c 使用的是http协议 xff0c 以及json的解码 后一篇说明 这里我们先说下转码 在vs2008中编码方式有Unicode编码
  • 串口显示乱码的原因总结

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • Linux出现Input/output error

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • 错误 expected '}' before ' ' token

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • 浅谈C语言中的布尔(bool)类型

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • C++类成员空间分配和虚函数表

    C 43 43 类成员空间分配和虚函数表 xff0c 非常详细的一篇文章 xff0c 受益匪浅 https www cnblogs com secondtonone1 p 7205108 html utm source 61 itdadao
  • 外部时钟与内部时钟区别 作用 使用条件

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • Ghostscript的介绍和移植

    关于ghostscript 以下简称gs Gs是一个地下工作者 xff0c 一般用户不熟悉它 xff0c 因为它上不和用户直接打交道 xff0c 下不直接接触打印机 但是在打印工作中它却扮演了极为重要的解色 一般从用户常见文件如图片或者wo
  • PPPoE on Android

    分享一下我老师大神的人工智能教程 零基础 xff01 通俗易懂 xff01 风趣幽默 xff01 还带黄段子 xff01 希望你也加入到我们人工智能的队伍中来 xff01 https blog csdn net jiangjunshow P
  • 文件编程 创建目录mkdir 函数

    分享一下我老师大神的人工智能教程 零基础 xff01 通俗易懂 xff01 风趣幽默 xff01 还带黄段子 xff01 希望你也加入到我们人工智能的队伍中来 xff01 https blog csdn net jiangjunshow L
  • VFY unable to resolve virtual method Landroid/support/v4/

    分享一下我老师大神的人工智能教程 零基础 xff01 通俗易懂 xff01 风趣幽默 xff01 还带黄段子 xff01 希望你也加入到我们人工智能的队伍中来 xff01 https blog csdn net jiangjunshow 使
  • CUPS移植记录

    分享一下我老师大神的人工智能教程 零基础 xff01 通俗易懂 xff01 风趣幽默 xff01 还带黄段子 xff01 希望你也加入到我们人工智能的队伍中来 xff01 https blog csdn net jiangjunshow C
  • gazebo多机器人仿真和move_base,diff_drive等gazebo包配置

    gazebo中的多机器人仿真指的是在gazebo中加入多个urdf xff0c 并控制机器人运动 下面是我总结的一些名称的命名规律 1 joint名称 在spawn model中 xff0c 通过 model model name添加参数
  • Golang语言移植-ARM开发环境搭建

    开发环境介绍 主机操作系统 xff1a Ubuntu14 04 64位目标平台 xff1a IMX 6Q ARM Cortex A9内核交叉工具链 xff1a arm poky linux gnueabi xff0c gcc4 9 1Go版
  • #每周一篇论文4#[感知]毫米波雷达与摄像头联合标定

    文章目录 源代码下载系列其他资源一 坐标系说明1 1 摄像头相关坐标系1 2 毫米波雷达相关坐标系1 3 GPS相关坐标系1 4 车体相关坐标系1 5 其他坐标系1 5 1 左右手坐标系 二 毫米波和摄像机联合标定2 1 毫米波 O X r
  • 单目测距 视觉测距

    文章目录 单目测距在kitti数据集中的测试结果C 43 43 工程原理代码注释 其他视觉测距算法 基于相似三角形的单目测距算法原理代码 参考资料 单目测距 在kitti数据集中的测试结果 C 43 43 工程 C 43 43 工程代码下载
  • python json 解析

    coding utf 8 import sys os re class JsonBaseType single type 61 0 object type 61 1 array type 61 2 class ParseException
  • proto_cmake_test

    proto cmake test Proto与CMAKE结合编译源代码 工程编译 span class token function cd span build cmake span class token punctuation span