cmake使用:
mkdir build
cd build
cmake ..
make
CMakeList.txt 参考模板
1 #1.cmake verson,指定cmake版本
2 cmake_minimum_required(VERSION 3.2)
3
4 #2.project name,指定项目的名称,一般和项目的文件夹名称对应
5 PROJECT(test_sqrt)
6
7 #3.head file path,头文件目录
8 INCLUDE_DIRECTORIES(
9 include
10 )
11
12 #4.source directory,源文件目录
13 AUX_SOURCE_DIRECTORY(src DIR_SRCS)
14
15 #5.set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
16 SET(TEST_MATH
17 ${DIR_SRCS}
18 )
19
20 #6.add executable file,添加要编译的可执行文件
21 ADD_EXECUTABLE(${PROJECT_NAME} ${TEST_MATH})
22
23 #7.add link library,添加可执行文件所需要的库,比如我们用到了libm.so(命名规则:lib+name+.so),就添加该库的名称
24 TARGET_LINK_LIBRARIES(${PROJECT_NAME} m)
自己工程里的一个CMakeList.txt,稍微复杂一些
add_definitions(-std=c++14)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_BUILD_TYPE Debug)
add_definitions(-Og -pthread) #用于添加编译器命令行标志(选项),通常的情况下我们使用其来添加预处理器定义
#1、cmake verson,指定cmake最小版本(必不可少)
#cmake_minimum_required(VERSION 2.6)
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
#2、project name,指定项目的名称,一般和项目的文件夹名称对应(必不可少)
project(linger)
#3、各外部依赖库
# cuda
find_package(CUDA REQUIRED) #寻找xxx.CMakeLists,以此找到包,并赋值各库相关变量
include_directories(/usr/local/cuda/include) #include file path,头文件路径
link_directories(/usr/local/cuda/lib64) #lib file path,库文件路径
## cudnn
include_directories(/usr/local/cuda/include)
link_directories(/usr/lib/x86_64-linux-gnu)
# tensorrt
include_directories(/home/yourname/Downloads/TensorRT-7.2.2.3/include)
link_directories(/home/yourname/Downloads/TensorRT-7.2.2.3/lib)
#opencv
find_package(OpenCV)
include_directories(/usr/local/include)
link_directories(/usr/local/lib)
link_directories(/home/yourname/opencv-3.4.15/my_build_dir/lib)
#eigen3
include_directories(/usr/include/eigen3)
#yaml-cpp
include_directories(/home/yourname/Hiaiscene/environment/yamlcpp/yaml-cpp-yaml-cpp-0.7.0/include/yaml-cpp)
link_directories(/home/yourname/Hiaiscene/environment/yamlcpp/yaml-cpp-yaml-cpp-0.7.0/build)
#libtorch
set(Torch_DIR /home/yourname/libtorch/share/cmake/Torch) #设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
find_package(Torch PATHS ${Torch_DIR} NO_DEFAULT REQUIRED)
if (Torch_FOUND)
message(STATUS "Torch library found!")
message(STATUS " include path: ${TORCH_INCLUDE_DIRS}" \n)
else ()
message(FATAL_ERROR "Could not locate Torch" \n)
endif()
include_directories(${TORCH_INCLUDE_DIRS})
#file(GLOB Source_Files ${PROJECT_SOURCE_DIR}/src/*.cpp)
#4、source directory,源文件目录
aux_source_directory(./ SRC_LIST)
aux_source_directory(./common COMMON_LIST)
aux_source_directory(./detector DETECTOR_LIST)
aux_source_directory(./tracker/sort SORT_LIST)
aux_source_directory(./tracker/featureExtractor FEATURE_LIST)
aux_source_directory(./judge JUDGE_LIST)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Og -Wfatal-errors -D_MWAITXINTRIN_H_INCLUDED")
cuda_add_library(yolov5_trt SHARED ${PROJECT_SOURCE_DIR}/detector/yololayer.cu)
#5、include file path,头文件路径
#list(APPEND SRC_LIST ${OTHER_SRC_LIST})
include_directories(
${PROJECT_SOURCE_DIR}/detector
${PROJECT_SOURCE_DIR}/common
${PROJECT_SOURCE_DIR}/tracker/sort
${PROJECT_SOURCE_DIR}/tracker/featureExtractor
${PROJECT_SOURCE_DIR}/judge
)
#6、add executable file,编译可执行文件(必不可少)
#add_executable(main ${SRC_LIST} ${DETECTOR_LIST} ${COMMON_LIST} ${SORT_LIST} ${FEATURE_LIST} ${JUDGE_LIST})
add_executable(main main.cpp ${DETECTOR_LIST} ${COMMON_LIST} ${SORT_LIST} ${FEATURE_LIST} ${JUDGE_LIST})
#7、add link library,添加可执行文件所需要的库,比如我们用到了libm.so(命名规则:lib+name+.so),就添加该库的名称
target_link_libraries(main nvinfer ${OpenCV_LIBS} ${CUDA_LIBS} ${TORCH_LIBRARIES} nvonnxparser nvinfer_plugin yolov5_trt cudart yaml-cpp)