1.创造cmake要求和项目名称
cmake_minimum_required(VERSION 2.8) #项目名称
project(项目名称)
2.添加编译器定义
add_definitions(-std=c++11)
add_definitions("-Wall")
- add_definitions(-std=c++11):添加编译器选项,使用 C++11 标准。
- add_definitions("-Wall"):开启所有常规的警告信息。
以下我们以导入opencv包为配置环境举例
set(OpenCV_DIR "D:/opencv/build")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
- set(OpenCV_DIR "D:/opencv/build"):设置 OpenCV 的安装路径。
- find_package(OpenCV REQUIRED):查找 OpenCV 库,并设置相应的变量。
- include_directories(${OpenCV_INCLUDE_DIRS}):包含 OpenCV 的头文件路径。
3,包含项目的头文件和库目录
include_directories(${OpenCV_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${OpenCV_DIR}/lib)
- include_directories:包含项目的头文件目录。
- link_directories:添加库文件目录,以便链接库文件。
4.设置 OpenCV 库列表
set(OpenCV_LIBS opencv_core
opencv_highgui
opencv_imgproc
opencv_imgcodecs
opencv_videoio)
set(OpenCV_LIBS ...):定义 OpenCV 库列表,将在链接时使用。
file(GLOB_RECURSE cpp_srcs ${PROJECT_SOURCE_DIR}/src/*.cpp ${PROJECT_SOURCE_DIR}/include/*.h)
file(GLOB_RECURSE cpp_srcs ...):递归搜索并收集项目中的所有源文件和头文件
5.链接各种库
add_library(DryEyeAlgorithm SHARED ${cpp_srcs})
target_link_libraries(你的项目 PRIVATE ${OpenCV_LIBS})
- add_library(DryEyeAlgorithm SHARED ${cpp_srcs}):创建一个共享库 你的项目,并包含所有源文件。
- target_link_libraries(DryEyeAlgorithm PRIVATE ncnn ${OpenCV_LIBS}):链接 OpenCV 库。
6.定义动态库接口
TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} PRIVATE DLL_API)
以DLL_API来定义API接口
7.安装指定目录
file(GLOB_RECURSE models ${PROJECT_SOURCE_DIR}/models/*)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${PROJECT_BINARY_DIR}/tests
LIBRARY DESTINATION ${PROJECT_BINARY_DIR}/tests
ARCHIVE DESTINATION ${PROJECT_BINARY_DIR}/tests
)
install(FILES ${models} DESTINATION ${PROJECT_BINARY_DIR}/tests/models)
message(${PROJECT_SOURCE_DIR})
- file(GLOB_RECURSE models ...):递归搜索并收集模型文件。
- install(TARGETS ...):安装目标文件到指定目录。
- install(FILES ${models} ...):安装模型文件到指定目录。
8.安装特定目录
set(BUILD_DIR "${PROJECT_SOURCE_DIR}/../buildx64")
set(TEST_DIR "${BUILD_DIR}/tests")
install(TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION ${TEST_DIR}
ARCHIVE DESTINATION ${TEST_DIR}
)
- set(BUILD_DIR ...):设置构建目录。
- set(TEST_DIR ...):设置测试目录。
- install(TARGETS ...):安装目标文件到指定目录。
9.打包好纯净版
install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION bin OPTIONAL)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
)
file(GLOB_RECURSE include_files ${PROJECT_SOURCE_DIR}/include/*.h)
file(GLOB_RECURSE lib_files ${PROJECT_SOURCE_DIR}/114514/*.lib)
install(FILES ${include_files} DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
install(FILES ${models} DESTINATION ${CMAKE_INSTALL_PREFIX}/models)
install(FILES ${third_lib_files} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
install(FILES ${PROJECT_SOURCE_DIR}/readme.md DESTINATION ${CMAKE_INSTALL_PREFIX})
交给别人使用