原创

cmake Tips

结合最近cmake的运用,对cmake的使用做简要总结。主要是关键词,编译思路的理解。

1. cmake编译源码生成可执行文件

思路:

(1) 添加第三方库,链接对应头文件。以opencv为例

set(OpenCV_PATH ${PROJECT_SOURCE_DIR}/../3rdParty/opencv430)
set(OpenCV_INCLUDE_DIRS ${OpenCV_PATH}/include/opencv4
                        ${OpenCV_PATH}/include/opencv4/opencv2)
set(OpenCV_LIBS ${OpenCV_PATH}/lib/libopencv_world.so)
include_directories(${OpenCV_INCLUDE_DIRS})
#最后表示把链接对应的头文件

(2)查找本项目头文件:注意如果头文件包含二级目录,应记得把所有头文件包进来

set(EPCV_INCLUDES ${PROJECT_SOURCE_DIR}/../include
                  ${PROJECT_SOURCE_DIR}/../include/common
                  ${PROJECT_SOURCE_DIR}/../include/epcv_engine)
include_directories(${EPCV_INCLUDES})

(3) 查找源文件:注意如果头文件包含二级目录,应记得把所有头文件包进来

#找到src文件
file(GLOB EPCV_TWO_DIM ${PROJECT_SOURCE_DIR}/../src/epcv_traffic_sign_classifier.cpp
                        ${PROJECT_SOURCE_DIR}/../src/epcv_engine/epcv_traffic_sign_classifier_engine.cpp)

(4)生成可执行文件

#根据src文件生成可执行文件
add_executable(demo_traffic_sign_classifier demo_traffic_sign_classifier.cpp ${EPCV_TWO_DIM} ${SAMPLES_COMMON_SOURCES_FILE})

(5)链接相关第三方库

#链接库文件
target_link_libraries(demo_traffic_sign_classifier  ${OpenCV_LIBS} ${TRTLIBS} ${CUDA_LIBRARIES})

2. cmake 链接动态库生成可执行文件

思路:

(1) 添加第三方库,链接对应头文件(同上)

(2)查找本项目头文件(同上)

(3) 查找已经编译生成的库文件(这里相当于用库文件代替源码)

file(GLOB TRAFFIC_LIBS ${PROJECT_SOURCE_DIR}/../lib/*.so)

(4)生成可执行文件

add_executable(demo_traffic_sign_classifier demo_traffic_sign_classifier.cpp  ${SAMPLES_COMMON_SOURCES_FILE})

(5)链接相关第三方库

#链接库文件
target_link_libraries(demo_traffic_sign_classifier  ${TRAFFIC_LIBS} ${OpenCV_LIBS} ${TRTLIBS} ${CUDA_LIBRARIES})

3. 将源文件编译成动态库

(1) 添加第三方库,链接对应头文件(同上)

(2)查找本项目头文件(同上)

(3)设置生成库的输出路径

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

(4)编译生成库文件

add_library(${LIB_NAME} SHARED ${SOURCE_FILES_TWO} ${SAMPLES_COMMON_SOURCES_FILE})

(5)链接依赖库

target_link_libraries(${LIB_NAME} ${OpenCV_LIBS} ${TRTLIBS} ${CUDA_LIBRARIES})

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CAM 论文阅读

    重新审视《 Network in network》中提出的全局平均 池化层(global average pooling),并阐明了它是如何通过图片标签就能让卷...

    yzh
  • CMAKE学习记录(二)

    # 找到boost特定版本,以及需要的子模块,1.46.1为最低版本,REQUIRED强调必须找到该模块,否则编译失败;

    yzh
  • 论文翻译:Deep Learning on Radar Centric 3D Object Detection

    即使许多现有的3D目标检测算法主要依赖于摄像头和LiDAR,但camera和LiDAR容易受到恶劣天气和光照条件的影响。radar能够抵抗这种情况。近期研究表明...

    yzh
  • 浅谈Kotlin中的函数

    Kotlin,已经被Android官方宣布 kotlin first 的存在,去翻 Android 官方文档的时候,发现提供的示例代码已经变成了 Kotlin。...

    2020labs小助手
  • cv2.VideoWriter_fourcc()

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    于小勇
  • 单片机到底是如何软硬件结合的(深度好文)

    我们通过IO和串口的软件开发,已经体验了嵌入式软件开发。不知道大家有没有疑惑,为什么软件能控制硬件?反正当年我学习51的时候,有这个疑惑。今天我们就暂停软件开发...

    morixinguan
  • [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

            比如接收双参数的,有 Bi 前缀, 比如 BiConsumer<T,U>, BiFunction<T,U,R> ;

    noteless
  • 函数防抖(debounce)和节流(throttle)在H5编辑器项目中的应用

    前端开发者对函数防抖和函数节流或多或少有些了解,最近在做一个H5编辑器的项目,由于画布功能复杂,计算量较大,在鼠标拖拽操作时尤其是在低配电脑上能够明显感受到卡顿...

    CS逍遥剑仙
  • 对数几率回归 —— Logistic Regression

    首先,在引入LR(Logistic Regression)模型之前,非常重要的一个概念是,该模型在设计之初是用来解决0/1二分类问题,虽然它的名字中有回归二字,...

    IT派
  • 启用 TCP BBR 拥塞控制算法

    自从 Linux 内核 4.9 开始已经封装了这个新的 TCP 控制算法 BBR。

    东云

扫码关注云+社区

领取腾讯云代金券