CMake通用基础模板

2024-07-08  本文已影响0人  leon0514

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})
上一篇 下一篇

猜你喜欢

热点阅读