1、项目结构
对于下面这样一个项目
- 把calc模块做成静态或者动态库
- 把sort模块做成静态库
- 然后再sort模块中的*.cpp调用calc模块生成的库即可(这样就制作了一个静态库引用动态或者静态库)
- test模块用于测试sort模块中的内容
.
├── calc
│ ├── add.cpp
│ ├── CMakeLists.txt
│ ├── dived.cpp
│ ├── mul.cpp
│ └── sub.cpp
├── CMakeLists.txt
├── inc
│ ├── calc.h
│ └── sort.h
├── sort
│ ├── CMakeLists.txt
│ ├── insert.cpp
│ └── select.cpp
└── test
├── CMakeLists.txt
└── sort.cpp
4 directories, 13 files
根目录的CMakeLists.txt编写
cmake_minimum_required(VERSION 3.10.2)
set(CMAKE_CXX_STANDARD 14)
project(ProjectName)
# 库生成的路径
set(LIBPATH ${PROJECT_SOURCE_DIR}/lib)
# 可执行程序的存储目录
set(EXECPATH ${PROJECT_SOURCE_DIR}/bin)
# 头文件目录
set(HEADPATH ${PROJECT_SOURCE_DIR}/inc)
# 库文件的名字
set(CALCLIB calc)
set(SORTLIB sort)
# 可执行程序的名字
set(EXECNAME sort_main)
# 添加子节点目录
# add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
add_subdirectory(calc)
add_subdirectory(sort)
add_subdirectory(test)
2、静态库引用静态库
2.1、calc模块CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)
project(calc)
# 搜索源文件
aux_source_directory(./ src_list)
# 添加头文件
include_directories(${HEADPATH})
# 设置库文件存储的位置
set(LIBRARY_OUTPUT_PATH ${LIBPATH})
# 制作静态库文件
add_library(${CALCLIB} STATIC ${src_list})
2.2、sort模块CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)
project(sort)
# 搜索源文件
file(GLOB src_list ./*.cpp)
# 添加头文件
include_directories(${HEADPATH})
# 链接已有的静态库 静态库的链接要写在制作之前
link_directories(${LIBPATH})
link_libraries(${CALCLIB})
# 设置库文件存储的位置
set(LIBRARY_OUTPUT_PATH ${LIBPATH})
# 制作静态库文件
add_library(${SORTLIB} STATIC ${src_list})
2.3、test模块CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)
project(test)
# 搜索源文件
aux_source_directory(./ main)
# 包含头文件
include_directories(${HEADPATH})
# 连接静态库
link_directories(${LIBPATH})
link_libraries(${SORTLIB})
# 设置可执行程序输出位置
set(EXECUTABLE_OUTPUT_PATH ${EXECPATH})
# 生成可执行程序
add_executable(${EXECNAME} ${main})
2、静态库链接动态库
2.1、calc模块CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)
project(calc)
# 搜索源文件
aux_source_directory(./ src_list)
# 添加头文件
include_directories(${HEADPATH})
# 设置库文件存储的位置
set(LIBRARY_OUTPUT_PATH ${LIBPATH})
# 制作动态库文件
add_library(${CALCLIB} SHARED ${src_list})
2.2、sort模块CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)
project(sort)
# 搜索源文件
file(GLOB src_list ./*.cpp)
# 添加头文件
include_directories(${HEADPATH})
# 设置库文件存储的位置
set(LIBRARY_OUTPUT_PATH ${LIBPATH})
# 制作静态库文件
add_library(${SORTLIB} STATIC ${src_list})
# 链接已有的动态库 动态库的链接要写在后面
link_directories(${LIBPATH})
target_link_libraries(${SORTLIB} ${CALCLIB})
2.3、test模块CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)
project(test)
# 搜索源文件
aux_source_directory(./ main)
# 包含头文件
include_directories(${HEADPATH})
# 连接静态库
link_directories(${LIBPATH})
link_libraries(${SORTLIB})
# 设置可执行程序输出位置
set(EXECUTABLE_OUTPUT_PATH ${EXECPATH})
# 生成可执行程序
add_executable(${EXECNAME} ${main})