CmakeLists 复杂c++工程应用实例

2023-05-16

project(vir_data_process)
cmake_minimum_required(VERSION 2.8)
add_compile_options(-std=c++11)

#include_directories(/usr/local/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/opencv-3.2.0/include)
include_directories(${CMAKE_SOURCE_DIR}/include)
#include_directories(/usr/local/cuda/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/cuda/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/darknet/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/protobuf/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/caffe/include)


link_directories("/usr/local/cuda/lib64")
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/cuda/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/caffe/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/opencv-3.2.0/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/darknet/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/protobuf/lib)


include_directories(${CMAKE_SOURCE_DIR}/3rdParty/opencv-3.2.0/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/caffe/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/boost_1_59_0)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/protobuf/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/darknet/include)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/zlog/include)
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR}/source)
include_directories(${CMAKE_SOURCE_DIR}/samples/result_decoding)
include_directories(${CMAKE_SOURCE_DIR}/3rdParty/cuda/include)


link_directories(${CMAKE_SOURCE_DIR}/3rdParty/protobuf/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/cairo/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/freetype /lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/opencv-3.2.0/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/darknet/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/zlog/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/cuda/lib)
link_directories(${CMAKE_SOURCE_DIR}/3rdParty/caffe/lib)



aux_source_directory(${CMAKE_SOURCE_DIR}/utility src_utility)
aux_source_directory(${CMAKE_SOURCE_DIR}/yolo src_yolo)
#aux_source_directory(${CMAKE_SOURCE_DIR}/include src_include)
aux_source_directory(${CMAKE_SOURCE_DIR}/ssd src_ssd)
aux_source_directory(${CMAKE_SOURCE_DIR}/lstm src_lstm)
aux_source_directory(${CMAKE_SOURCE_DIR}/cls src_cls)
add_library(alg_vir_sdk SHARED ${yolo} ${src_utility} ${src_yolo} ${src_ssd} ${src_cls} ${src_lstm})

FILE(GLOB_RECURSE Includefiles ${CMAKE_SOURCE_DIR}/include/*.h)
FILE(GLOB_RECURSE Includeutility ${CMAKE_SOURCE_DIR}/utility/*.h)
FILE(GLOB_RECURSE Includeyolo ${CMAKE_SOURCE_DIR}/yolo/*.h)
FILE(GLOB_RECURSE Includessd ${CMAKE_SOURCE_DIR}/ssd/*.h)
FILE(GLOB_RECURSE Includelstm ${CMAKE_SOURCE_DIR}/lstm/*.h)
FILE(GLOB_RECURSE Includecls ${CMAKE_SOURCE_DIR}/cls/*.h)

add_custom_target(whatever SOURCES
        ${Includefiles}
        ${Includeutility}
        ${Includeyolo}
        ${Includessd}
        ${Includelstm}
        ${Includecls})

target_link_libraries(alg_vir_sdk darknet cudnn cuda opencv_core
        opencv_highgui opencv_imgproc opencv_imgcodecs
        opencv_video opencv_videoio boost_system boost_thread boost_filesystem
        opencv_core opencv_imgproc opencv_highgui opencv_ml opencv_video opencv_features2d opencv_calib3d opencv_objdetect opencv_imgcodecs opencv_videoio
        opencv_flann boost_serialization boost_system boost_filesystem glog caffe hdf5 hdf5_hl boost_thread protobuf atlas cublas cudart culibos curand cudnn
        ssl3 pthread dl rt boost_system boost_filesystem)

#set(CMAKE_CXX_STANDARD 11)
#set(CMAKE_BUILD_TYPE Debug)
#set(CMAKE_BUILD_TYPE Release)
add_executable(vir_data_process main.cpp ${yolo} ${src_utility} ${yolo} ${ssd} ${cls} ${lstm})

#add_library(libdarknet STATIC IMPORTED)

target_link_libraries(vir_data_process alg_vir_sdk darknet cudnn cuda opencv_core
        opencv_highgui opencv_imgproc opencv_imgcodecs
        opencv_video opencv_videoio boost_system boost_thread boost_filesystem
        opencv_core opencv_imgproc opencv_highgui opencv_ml opencv_video opencv_features2d opencv_calib3d opencv_objdetect opencv_imgcodecs opencv_videoio
        opencv_flann boost_serialization boost_system boost_filesystem glog caffe hdf5 hdf5_hl boost_thread protobuf atlas cublas cudart culibos curand cudnn
        ssl3 pthread dl rt boost_system boost_filesystem)

install(TARGETS vir_data_process
        RUNTIME DESTINATION bin)

 

对于多级目录,

推荐下载一个看目录的工具

sudo apt-get install tree

tree -a ./fold

比如

.
├── 3rdParty
│   └── caffe
│       └── include
│           └── caffe
│               └── common.hpp
├── cmake
│   └── Dependencies.cmake
├── CMakeLists.txt
├── include
│   └── Alg_VIR_Handheld_Video_Interface.h
├── source
│   ├── CMakeLists.txt
│   ├── common
│   │   ├── common.cpp
│   │   └── include
│   │       └── common.hpp
│   └── debug
│       ├── demonstrate
│       │   ├── demonstrate.cpp
│       │   └── include
│       │       └── demonstrate.hpp
│       └── redis_utils
│           ├── include
│           │   └── redis_utils.hpp
│           └── redis_utils.cpp
└── test
    ├── CMakeLists.txt
    └── redis.cpp

.
├── 3rdParty
│   └── caffe
│       └── include
│           └── caffe
│               └── common.hpp
├── cmake
│   └── Dependencies.cmake
├── CMakeLists.txt
├── include
│   └── Alg_VIR_Handheld_Video_Interface.h
├── source
│   ├── CMakeLists.txt
│   ├── common
│   │   ├── common.cpp
│   │   └── include
│   │       └── common.hpp
│   └── debug
│       ├── demonstrate
│       │   ├── demonstrate.cpp
│       │   └── include
│       │       └── demonstrate.hpp
│       └── redis_utils
│           ├── include
│           │   └── redis_utils.hpp
│           └── redis_utils.cpp
└── test
    ├── CMakeLists.txt
    └── redis.cpp

一个工程里面有这些东西

尤其注意主:

CMakeLists.txt

cmake/Dependencies.cmake

source/Dependencies.cmake

test/CMakeLists.txt

主CMakeLists.txt可以促使头文件全局有效,但source/Dependencies.cmake里面的头文件比如test/redis.cpp是不能直接引用,需要绝对路径,但是强制引用会把source/里面的引用搞得一塌糊涂,所以需要引用source 里面的头文件的内容,就直接include注册在主CMakeLists.txt里面,比如3rdParty里面的全部在。

主CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

SET(CMAKE_EXE_LINKER_FLAGS " -no-pie")
set(CMAKE_CXX_STANDARD 11)

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib)

include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR}/source/common/include)
include_directories(${CMAKE_SOURCE_DIR}/source/debug/redis_utils/include)

# ---[ Dependencies
include(cmake/Dependencies.cmake)

add_subdirectory(source) 
add_subdirectory(test)


 

cmake/Dependencies.cmake里面主要负责3rdParty的引用,然后再连到主CMakeLists.txt,利用这句

# ---[ Dependencies
include(cmake/Dependencies.cmake)

 

cmake/Dependencies.cmake内容,非常简单

# protobuf
set(PROTOBUF_ROOT ${CMAKE_SOURCE_DIR}/3rdParty/protobuf)
include_directories(${PROTOBUF_ROOT}/include)
link_directories(${PROTOBUF_ROOT}/lib)

# cuda
set(CUDA_ROOT ${CMAKE_SOURCE_DIR}/3rdParty/cuda_100)
include_directories(${CUDA_ROOT}/include)
link_directories(${CUDA_ROOT}/lib)
link_directories(${CUDA_ROOT}/lib/stubs)

# opencv
set(OPENCV_ROOT ${CMAKE_SOURCE_DIR}/3rdParty/opencv-3.4.10)
include_directories(${OPENCV_ROOT}/include)
link_directories(${OPENCV_ROOT}/lib)

# caffe
set(CAFFE_ROOT ${CMAKE_SOURCE_DIR}/3rdParty/caffe_cuda100)
include_directories(${CAFFE_ROOT}/include)
link_directories(${CAFFE_ROOT}/lib)

 

source/Dependencies.cmake

test/CMakeLists.txt

利用这句代码连到工程

add_subdirectory(source) 
add_subdirectory(test)

 

test/CMakeLists.txt内容:包含一个可执行文件目标

# set the test link libs
SET(CMAKE_EXE_LINKER_FLAGS " -no-pie")
add_compile_options(-std=c++11)

#link_directories(${CMAKE_SOURCE_DIR}/3rdParty/redisLib)

add_executable(redis redis.cpp)
target_link_libraries(redis handheld_video libavv_alg_redis.a libhiredis.a)



add_executable(testModel testModel.cpp)
target_link_libraries(testModel handheld_video)

source/Dependencies.cmake:包含一个编译的算法库,和另一个可执行文件目标(注因为主函数被写在source里面,本例忘记把文件在上文中加入了,还望海涵)

cmake_minimum_required(VERSION 3.5.0)
project(handheld_video)
SET(CMAKE_EXE_LINKER_FLAGS " -no-pie")
# set the common link libs
list(APPEND HANDHELD_VIDEO_LINK_LIBS  cuda)
list(APPEND HANDHELD_VIDEO_LINK_LIBS  nvrtc)
list(APPEND HANDHELD_VIDEO_LINK_LIBS  boost_date_time)




aux_source_directory(${CMAKE_SOURCE_DIR}/source/common common_src)
aux_source_directory(${CMAKE_SOURCE_DIR}/source/debug/redis_utils redis_utils_src)
aux_source_directory(${CMAKE_SOURCE_DIR}/source/debug/demonstrate demonstrate_src)



add_library(handheld_video SHARED
        ${common_src}
        ${redis_utils_src}
        ${demonstrate_src}
        ../include/Alg_VIR_Handheld_Video_Interface.h ../source/api/Alg_VIR_Handheld_Video_Interface.cpp)

target_link_libraries(handheld_video ${TORCH_LIBRARIES} ${HANDHELD_VIDEO_LINK_LIBS})

add_executable(redisBaoDing app/redis/redis.cpp)
target_link_libraries(redisBaoDing handheld_video )

 

 

 

 

 

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

CmakeLists 复杂c++工程应用实例 的相关文章

  • 三维重建了解

    一 三维重建方法 1 1 传统方法 RGBD D来源结构光或者TOF xff1a 缺点 xff0c 重建范围受限 xff0c 一般不能重建大模型 xff1b 比如 xff0c kinectFusion xff0c DynamicFusion
  • docker容器常用命令

    一 常用命令 显示本地镜像 xff1a docker images 显示已经启动的容器 xff1a docker ps a 从docker hub拉取镜像 reed98 airsim v0是镜像名 xff1a docker pull ree
  • ARM学习随笔(12)定时器查询方式和中断方式

    定时器详细讲解 百度文库 点击打开链接 xff08 一 xff09 查询方式和中断方式的区别在于 xff1a 查询方式不断查询标志位然后进行处理 xff0c 而中断要编写中断服务子程序来处理中断事件 xff08 二 xff09 内部中断是指
  • vgg16网络裁剪并加载模型参数

    主要是测试下模型裁剪后转onnx的问题 删除vgg16网络全连接层 xff0c 加载预训练模型并重新保存模型参数 xff0c 将该参数用于转onnx模型格式 usr bin env python coding utf 8 64 Time 2
  • pth转onnx的三种情况

    usr bin env python coding utf 8 64 Time 2022 8 3 16 19 64 Author weiz 64 ProjectName cbir 64 File pth2onnx py 64 Descrip
  • 以vgg为backbone的简易图像检索系统

    图像检索 xff08 Content based Image Retrieval xff0c 简称CBIR xff09 即以图搜图 xff0c 基于图片语义信息 xff0c 诸如颜色 纹理 布局 CNN based高层语义等特征检索技术 该
  • img2pose: Face Alignment and Detection via 6DoF, Face Pose Estimation代码理解

    import argparse import os import sys import time import numpy as np from PIL import Image ImageOps from torchvision impo
  • 解决普通用户使用sudo找不到命令

    sudo bazel build c opt define MEDIAPIPE DISABLE GPU 61 1 mediapipe examples desktop face mesh face mesh cpu 出现 xff1a sud
  • sfm算法之三角化(三角测量)

    sfm算法流程一般是特征点提取 特征点匹配 计算本质矩阵 基础矩阵 xff0c 最后三角化 但是利用机械臂去观察周围 xff0c 前后帧姿态变化参数是具有的 xff0c 所以不需要通过基础矩阵获取 即利用机械臂的信息直接进行深度估计 已知
  • bazel构建项目案例(第三方库,编译成库,运行案例)

    使用bazel构建项目 xff0c 包含如何引入外部库 xff08 项目中引入了opencv和编译的tensorflow lite库 xff09 xff0c 如何编译成动态库和静态库 xff0c 以及如何调用编译好的库 项目根目录的所有文件
  • 各种小功能集二

    各种小功能集一 十一 C C 43 43 路径解析 头文件 std string UtilsGetPath const char pszFilename std string UtilsGetDirname const char pszFi
  • windows10配置paddleOCR的CPU版本总结

    paddleOCR的CPU版本依赖的库还是比较少的 如下 1 opencv库 本人配置的版本是opencv4 5 0 2 paddle inference 推理库 该库解压后有version txt文件 xff0c 版本信息如下 xff1a
  • 传统图像技术的边缘提取

    usr bin env python coding utf 8 import cv2 import os import numpy as np def laplacian img ksize 61 3 laplacian 61 cv2 La
  • TCP-UDP网络编程调试助手下载

    下载地址 xff1a 可能需要谷歌 xff1a 软件干净 xff0c 挺好用的 xff0c 如果有更好的 xff0c 欢迎留言 xff01 https www waveshare com wiki File TCP UDP Debug 7z
  • Data Matrix码的使用

    一 引言 Data Matrix原名Data code xff0c 由美国国际资料公司 International Data Matrix 简称ID Matrix 于1989年发明 Data Matrix又可分为ECC000 140与ECC
  • 小样本学习(Few-Shot Learning)训练参数意义

    一 常规参数 1 1 epoch 是指所有的训练数据都要跑一遍 假设有6400个样本 xff0c 在训练过程中 xff0c 这6400个样本都跑完了才算一个epoch 一般实验需要训练很多个epoch xff0c 直到LOSS稳定后才停止
  • 不同相机之间图片像素对应关系求解(单应性矩阵求解)

    一 场景 相机1和相机2相对位置不变 xff0c 相机拍摄图片有重叠 xff0c 求他们交叠部分的一一对应关系 数学语言描述为已知相机1图片中P点像素 u1 v1 xff0c 相机1中P点在相机2图片中像素值为 u2 v2 xff0c 它们
  • python协程学习

    一 什么是协程及实现方式 1 1 协程 又称微线程 xff0c 纤程 也称为用户级线程 xff0c 在不开辟线程的基础上完成多任务 xff0c 也就是在单线程的情况下完成多任务 xff0c 多个任务按照一定顺序交替执行 1 2 实现方式 g
  • 无法打开文件libboost_random-vc141-mt-s-x64-1_81.lib

    踩坑过程 xff1a 需要使用websocketpp工具 xff0c 得先安装boost 安装boost及websocketpp过程简单且顺利 xff0c 并且能正常能正常运行官方例程 把官方例程简单封装测试 xff0c 一切皆好 等把we
  • 如何一步让你图像分类达到90%以上精准度

    这段时间一直在做图像分类相关的项目 xff0c 也认识了很多这个领域的小伙伴们 xff0c 有不少小伙伴们都是刚接触图像分类 xff0c 对着各种个样的图像分类算法 xff1a AlexNet VGG 16 VGG 19 ResNet 都是

随机推荐