前置操作:
- 首先下载MinGW,放在C盘目录下,添加环境变量
C:\MinGW\bin
,将mingw32-make.exe拷贝一份改名成make.exe
- 下载安装cmake,重启VS code编译环境。
先示范一个简单版本的CMakeLists脚本:
cmake_minimum_required(VERSION 2.9)
project(demo)
add_definitions("-Wall -std=c++17")
#aux_source_directory(. DIR_SRCS)
add_executable(demo Demo.cpp Property.cpp)
进一步将源文件和头文件分离,目录结构:
demo.cpp
CMakeLists.txt
include
|
---TLV.h
---Property.h
src
|
---Property.cpp
CMakeLists.txt
# 最小cmake版本要求
cmake_minimum_required(VERSION 2.9)
# 项目名称
project(demo)
# 添加定义,这里是编译选项显示所有warning,使用C++17标准
add_definitions("-Wall -std=c++17")
# 设置include路径变量INC_DIR
set(INC_DIR ${PROJECT_SOURCE_DIR}/include)
# 设置source路径变量SRC_DIR
set(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
# 添加include目录,以包含头文件
include_directories(
${INC_DIR}
)
# 添加源文件目录,变量为SRC_LIST
aux_source_directory(
${SRC_DIR} SRC_LIST
)
# 添加可执行文件名,源文件
add_executable(demo Demo.cpp ${SRC_LIST})
控制台执行以下语句,生成makefile到当前目录下的build文件夹
cmake -G "MinGW Makefiles" . -B ./build
cd到build文件夹,执行make
make
============================================================================
另一个包含链接的例子:
- 创建一个main程序
main.cpp
#include <iostream>
#include "./math/MathFun.h"
int main()
{
std::cout<<"hello, world"<<std::endl;
double base;
double exp;
std::cout << "Enter the base: " << std::endl;
std::cin >> base;
std::cout << "Enter the exp: " << std::endl;
std::cin >> exp;
double result = power(base, exp);
std::cout << "Result: " << result << std::endl;
return 0;
}
添加Mathfun.h与MathFun.cpp
Mathfun.h
double power(double base, int exponent);
Mathfun.cpp
#include "./MathFun.h"
double power(double base, int exponent) {
int result = base;
int i;
if (exponent == 0) {
return 1;
}
for (i = 1; i < exponent; ++i) {
result = result * base;
}
return result;
}
- 创建Cmake file
顶层
# cmake 最低版本要求
cmake_minimum_required(VERSION 2.9)
# 定义整个CMake的工程名
project(main)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加 math 子目录
add_subdirectory(math)
# 指定生成目标
add_executable(main main.cpp)
# 添加链接库
target_link_libraries(main MathFun)
mathfun层
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library(MathFun ${DIR_LIB_SRCS})
- make步骤
- 控制台中输入
cmake -G "MinGW Makefiles" .
这是Windows下调用MinGW编译器的指令。 - 一个完善的编译指令:
cmake -G "MinGW Makefiles" . -B ./build
- 上述指令完成后,生成了Makefile,控制台输入
make
即开始编译可执行程序。
文件层次结构:
main.cpp
CMakeLists.txt
math
|
—Mathfun.h
—Mathfun.cpp
—CMakeLists.txt
参考文章:CMake 入门实战