cmake指令简单讲解,以及给出示例文件

CMAKE_CURRENT_SOURCE_DIR 指向CMakeLists.txt所在的目录
CMAKE_BUILD_TYPE “Debug” /“Release” 一般指定这两种形式
这个变量值为Debug的时候,Cmake会使用变量CMAKE_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG中的字符串作为编译选项生成Makefile,
当这个变量值为Release的时候,工程会使用变量CMAKE_CXX_FLAGS_RELEASE和CMAKE_CFLAGS_RELEASE选项生成Makefil
CMAKE_CXX_FLAGS 指定c++编译器
CMAKE_INSTALL_PREFIX定义安装路径
示例:cmake -D
add_subdirectory 将指定的文件夹添加到build任务列表中
FIND_PACKAGE 在指定路径下寻找包
add_executable 使用给定的源文件,为工程生成一个可执行文件
target_link_libraries 将目标文件与库文件进行链接(简单来说,自己写的文件和系统库文件进行链接)
add_library(libname SHARED ${SRC}) 添加名为libname动态链接库(shared因此是动态链接库,运行时被加载)
install(TARGETS LIBRARY DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/install/)
LIBRARY动态库,ARCHIVE静态库 DESTINATION指定安装后的路径

指令:
set(SRC main.cpp eval.cpp dataReader.cpp) 用SRC代替后面的文件main.cpp eval.cpp dataReader.cpp

example:
源文件: hello.c
头文件: hello.h
so文件:libhello.so
安装位置: /hello/install/
源文件目录:/home/hello/libhello/hello.c
/home/hello/libhello/hello.h

编译生成的中间文件 /home/hello/build/
hello.c
#include<stdio.h>
#inclide"hello.h"
void hello()
{
printf(“hello”);
}

hello.h
#ifndef HELLO_H
#define HELLO_H
#include <stdio.h>
void hello;
#endif

使用cmake编译和安装
在/home/hello/文件夹下新建CMakeLists.txt,添加如下内容:
cmake_minimum_required(VERSION 2.6)
add_library(hello SHARED ${PROJECT_SOURCE_DIR}/libhello/hello.c) 只依赖.c文件,而不需要.h文件,感觉比较奇怪
PROJECT_SOURCE_DIR是CMakeLists.txt文件所在的绝对路径
install(TARGETS hello LIBRARY DESTINATION lib)

给一个完整的示例文件:来源于项目工程文件,完全可以编译通过
cmake_minimum_required(VERSION 2.8)
project(demo)

set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -fPIC -std=c++11 -Wall -Ofast -Wfatal-errors”)

#add wrapper
set(TRT_WRAPPER_DIR C M A K E C U R R E N T S O U R C E D I R / t e n s o r R T W r a p p e r / c o d e ) a d d s u b d i r e c t o r y ( {CMAKE_CURRENT_SOURCE_DIR}/tensorRTWrapper/code) add_subdirectory( CMAKECURRENTSOURCEDIR/tensorRTWrapper/code)addsubdirectory({TRT_WRAPPER_DIR})
include_directories(${TRT_WRAPPER_DIR}/include)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

#add opencv
FIND_PACKAGE(OpenCV REQUIRED)
include_directories( O p e n C V I N C L U D E D I R S ) l i n k d i r e c t o r i e s ( {OpenCV_INCLUDE_DIRS}) link_directories( OpenCVINCLUDEDIRS)linkdirectories({OpenCV_LIBRARIES_DIRS})

#build runYolov3
add_executable(runYolov3 main.cpp eval.cpp dataReader.cpp)
target_link_libraries(runYolov3 TrtNet ${OpenCV_LIBS})

#generate so file
set(${CMAKE_CURRENT_SOURCE_DIR})
set(SRC main.cpp eval.cpp dataReader.cpp)
add_library(libyolov3 SHARED ${SRC})
install(FILES LIBRARY DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})

#generate exe file
install(TARGETS runYolov3 DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/install/)

so库调用方法: 使用python接口进行调用
coordinations = libyolov3.main.yolov3(file_name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值