CMake的使用

先示范一个简单版本的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

============================================================================

另一个包含链接的例子:

  1. 创建一个main程序
    main.cpp
#include 
#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;
}

  1. 创建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编译器的指令。
  • 上述指令完成后,生成了Makefile,控制台输入make即开始编译可执行程序。

文件层次结构:
main.cpp
CMakeLists.txt
math
|
—Mathfun.h
—Mathfun.cpp
—CMakeLists.txt

参考文章:CMake 入门实战

你可能感兴趣的:(C程序设计语言,c++,开发语言)