CmakeList编写基本规则

更新时间:2023-07-14 16:42:29 阅读: 评论:0

世界地球日手抄报内容CmakeList编写基本规则
⼀ 开头通⽤模块
1.1 cmake版本要求
cmake_minimum_required( VERSION 2.8)可乐治咳嗽
#⼯程⽂件名loop_closure,可任取
project( loop_closure )
1.2 编译模式
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Relea)
ENDIF()
MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})
当然如果此处在前⾯加上语句:
t(CMAKE_BUILD_TYPE debug)
即表⽰设置为debug模式编译。
1.3 检查C++版本
检查C++的版本
Check C++11 or C++0x support
include(CheckCXXCompilerFlag)进攻的反义词
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
t(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elif(COMPILER_SUPPORTS_CXX0X)叶圣陶的资料简介
t(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
el()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Plea u a different C++ compiler.") endif()
⼆ 项⽬⽂件配置模块
接下来,便开始配置各个库模块。
2.1 如果仅包含OpenCV库时
t(OpenCV_DIR "/usr/local/include/opencv3.2.0/share/OpenCV")
find_package(OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS})
#⽣成可执⾏⽂件
add_executable(${PROJECT_NAME} src/loop_closure.cpp )
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
备注:这⾥的OpenCV包含⽬录为含有ake的路径。
如下图:
2.2 如果包含第三⽅库,该库为源码形式(.h和.cpp),⾮动态链接库
此处以在⼯程中添加词袋库DBoW2为例,这⾥的DBoW2是以源码形式包含,也即未编译成.so⽂件。
2.2.1 包含第三库的头⽂件
#设置.h⽂件对应的路径
t( DBoW2_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/ThirdParty/DBow-master/include/)
#包含.h⽂件路径
include_directories( ${OpenCV_INCLUDE_DIRS}
${DBoW2_INCLUDE_DIRS} ${DBoW2_INCLUDE_DIRS}/DBoW2/)
注:上述为啥要⽤两条路径${DBoW2_INCLUDE_DIRS}和${DBoW2_INCLUDE_DIRS}/DBoW2/?
为了防⽌在include层找不到,继续往下⼀层路径include/DBoW2/路径下查找,这是为了防⽌某些⽂件的包含路径不⼀致导致头⽂件查找错误。
2.2.2 包含第三⽅库的cpp⽂件
t(DBoW2_SRCS "${PROJECT_SOURCE_DIR}/ThirdParty/DBow-master/src")
#⽣成可执⾏⽂件
add_executable(${PROJECT_NAME} src/loop_closure.cpp  src/run_main.cpp
企业文化建设论文
${DBoW2_SRCS}/BowVector.cpp ${DBoW2_SRCS}/FBrief.cpp ${DBoW2_SRCS}/FeatureVector.cpp
${DBoW2_SRCS}/FORB.cpp ${DBoW2_SRCS}/FSurf64.cpp ${DBoW2_SRCS}/QueryResults.cpp ${DBoW2_SRCS}/ScoringObject.cpp)
其中,src/loop_closure.cpp  src/run_main.cpp 为本⼯程中我⾃⼰实现的,⽽对于其他的cpp⽂件,则直接添加路径即可。
另⼀种⽅式,添加cpp⽂件路径更为简洁⽅便。
file(GLOB DBoW2_SRCS ${PROJECT_SOURCE_DIR}/ThirdParty/DBow-master/src/*.cpp)
add_executable(${PROJECT_NAME} src/loop_closure.cpp  src/run_main.cpp ${DBoW2_SRCS})
2.3 如果包含第三⽅库,为库形式(此处以静态库为例(.a后缀))
在上述⼯程下,同时还包含有DBoW3库,此库已经按默认路径编译安装到计算机内存中。我们可以按如下⽅式添加DBoW3库。1)包含头⽂件
t( DBoW3_INCLUDE_DIRS "/usr/local/include")
2)添加库
t( DBoW3_LIBS "/usr/local/lib/libDBoW3.a")最简单的收尾结
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${DBoW3_LIBS}
三年级数学故事)
通过上述⽅式,即可调⽤。
三 ⼀个简单的⽂件demo
该demo中相较于上述总结添加的库,还额外包含了DLib库。
cmake_minimum_required( VERSION 2.8)
project( loop_closure )
#t(CMAKE_BUILD_TYPE  Debug)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Relea)
ENDIF()
MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})
# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
t(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elif(COMPILER_SUPPORTS_CXX0X)
t(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
el()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Plea u a different C++ compiler.")
endif()
#opencv
壁报模板#t(OpenCV_DIR "/usr/local/include/opencv3.2.0/share/OpenCV")
t(OpenCV_DIR "/opt/ros/kinetic/share/OpenCV-3.3.1-dev")
find_package(OpenCV REQUIRED)
t( DBoW3_INCLUDE_DIRS "/usr/local/include")

本文发布于:2023-07-14 16:42:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1081401.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:路径   包含   编译   模块   版本   形式   添加
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图