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)