1. 工程结构
每个代码文件均包含CMakeLists.txt文件
.
├── CMakeLists.txt
├── build
├── mylib
│ ├── CMakeLists.txt
│ ├── mymath.cpp
│ └── mymath.hpp
└── src
├── CMakeLists.txt
└── demo.cpp
3 directories, 6 files
2. CMakeLists.txt
(1) mylib路径下的CMakeLists.txt
├── mylib
│ ├── CMakeLists.txt
│ ├── mymath.cpp
│ └── mymath.hpp
# 把该文件加的所有文件 用变量DIR_LIB_SRCS表示
AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)
# 设置编译后输出的库文件路径
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
# 将mylib文件,生成Mylib.a库文件
ADD_LIBRARY(Mylib STATIC ${DIR_LIB_SRCS})
(2) src路径下的CMakeLists.txt
└── src
├── CMakeLists.txt
└── demo.cpp
# 添加mylib路径
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib)
# 生成可执行文件的路径
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
# 把该文件加的所有文件 用变量DIR_LIB_SRCS表示
AUX_SOURCE_DIRECTORY(./ DIR_SRCS)
# 生成可执行文件demo4
ADD_EXECUTABLE(demo4 ${DIR_SRCS})
# 链接Mylib文件 生成demo5
TARGET_LINK_LIBRARIES(demo4 Mylib)
(3)顶层CMakeLists.txt
# 设置最低的cmake版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
# 设置工程名
PROJECT(demo5)
# 添加子文件夹路径
ADD_SUBDIRECTORY(./mylib)
ADD_SUBDIRECTORY(./src)
3. 执行
# cd build && cmake .. && make
# ./bin/demo4 2 10