CMake模板
### CMakeLists 通用基础模板
# 项目目录结构
# .
# ├── CMakeLists.txt
# ├── README.md
# ├── build
# ├── src
# │ ├── main.cpp
# │ └── operator
# │ ├── add.cpp
# │ ├── add.hpp
# │ ├── sub.cpp
# │ └── sub.hpp
# └── workspace
# ├── bin
# └── lib
cmake_minimum_required(VERSION 3.9)
project("Application")
#设定编译参数
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE "Release")
# 查找所有编译文件
file(GLOB_RECURSE CPP_SRC_LIST ${PROJECT_SOURCE_DIR}/src/*.cpp)
file(GLOB_RECURSE CC_SRC_LIST ${PROJECT_SOURCE_DIR}/src/*.cc)
file(GLOB_RECURSE C_SRC_LIST ${PROJECT_SOURCE_DIR}/src/*.c)
list(APPEND SRC_LIST ${CPP_SRC_LIST} ${CC_SRC_LIST} ${C_SRC_LIST})
# 根据需求删除不需要编译的文件
# 按照功能将不同的文件放在不同的文件夹中,如果编译时不需要该功能可直接排除该文件夹中的所有文件
# file(GLOB_RECURSE OPERATOR_FILE_LIST ${PROJECT_SOURCE_DIR}/src/operator/*.cpp)
# list(REMOVE_ITEM SRC_LIST ${OPERATOR_FILE_LIST})
# message(${SRC_LIST})
# 设定头文件路径
include_directories(${PROJECT_SOURCE_DIR}/src)
# include_directories("路径")
# 设置库文件生成路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/workspace/lib)
# 设置可执行文件生成路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/workspace/bin)
# 设置库名称
set(LIBRARY_NAME "xxx")
set(STATIC_LIBRARY_NAME ${LIBRARY_NAME}_static)
set(SHARED_LIBRARY_NAME ${LIBRARY_NAME}_shared)
set(EXEC_LIBRARY_NAME "pro")
# 设置需要连接的库文件 可以按照所在文件夹分类
# set(LIBS1_PATH "/path/to/libs1")
# link_directories(${LIBS1_PATH})
# set(LIBS1 a b c)
# set(LIBS2_PATH "/path/to/libs1")
# link_directories(${LIBS2_PATH})
# set(LIBS2 d e f)
# 生成静态库
add_library(${STATIC_LIBRARY_NAME} STATIC ${SRC_LIST})
set_target_properties(${STATIC_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${LIBRARY_NAME})
# 链接库文件
# target_link_libraries(${STATIC_LIBRARY_NAME} ${LIBS1} ${LIBS2})
# 生成动态库
add_library(${SHARED_LIBRARY_NAME} SHARED ${SRC_LIST})
set_target_properties(${SHARED_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${LIBRARY_NAME})
# 链接库文件
# target_link_libraries(${SHARED_LIBRARY_NAME} ${LIBS1} ${LIBS2})
# 生成可执行文件
add_executable(${EXEC_LIBRARY_NAME} ${SRC_LIST})
# 链接库文件
# target_link_libraries(${EXEC_LIBRARY_NAME} ${LIBS1} ${LIBS2})
说明
项目目录结构基于
.
├── CMakeLists.txt
├── README.md
├── build
├── src
│ ├── main.cpp
│ └── operator
│ ├── add.cpp
│ ├── add.hpp
│ ├── sub.cpp
│ └── sub.hpp
└── workspace
├── bin
└── lib
根据需求移除部分文件的编译
按照功能将不同的文件放在不同的文件夹中,如果编译时不需要该功能可直接排除该文件夹中的所有文件
# 根据需求删除不需要编译的文件
# 按照功能将不同的文件放在不同的文件夹中,如果编译时不需要该功能可直接排除该文件夹中的所有文件
file(GLOB_RECURSE OPERATOR_FILE_LIST ${PROJECT_SOURCE_DIR}/src/operator/*.cpp)
list(REMOVE_ITEM SRC_LIST ${OPERATOR_FILE_LIST})
# message(${SRC_LIST})
根据需求设置编译参数
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE "Release")
```根据需求设置编译出来的库名称
```CMAKE
set(LIBRARY_NAME "xxx")
设置需要链接的库文件和所在目录
# 设置需要连接的库文件 可以按照所在文件夹分类
set(LIBS1_PATH "/path/to/libs1")
link_directories(${LIBS1_PATH})
set(LIBS1 a b c)
set(LIBS2_PATH "/path/to/libs1")
link_directories(${LIBS2_PATH})
set(LIBS2 d e f)
# 写在最后
target_link_libraries(${EXEC_LIBRARY_NAME} ${LIBS1} ${LIBS2})