cmake基础 - linux 和windows

一、什么是CMake?有什么用的?

CMake是一个跨平台的编译(Build)工具, 不同平台之间的编译方式遵循不同的规则,彼此不通用。因此 Cmake被提出,他统一了一套规则, 来描述所有平台的编译过程。

它允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。

cmake 文档:https://cmake.org/cmake/help/latest/guide/tutorial/index.html

二、linux 下的 Cmake 使用

以hello_world为例进行分析

1、 基础运行

在这里插入图片描述

(1) CMakeList.txt

# 指定所需 CMake 的最低版本
cmake_minimum_required (VERSION 3.5)
# 项目的名称 hello_world
project (hello_world)
# 将名为 hello.c 的源文件编译成一个名称为 hello_world.exe 的可执行文件
add_executable(hello_world hello.c)

(2) hello.c

#include <stdio.h>
int main()
{
   printf("hello world\n");
   return 0;
}

(3) 编译
创建build文件夹, 在build 文件夹路径下进行编译

mkdir build
cd build
cmake ../test
cmake --build .  或者  make
2、 cmake 编译Debug和release版本

一般Debug和Release必须在不同的目录下编译,否则每次当切换模式时必须把编译文件全部删掉。如果不使用CMAKE_BUILD_TYPE参数,则默认是Debug

# Debug 用于无优化的情况下,使用调试符号 构建可执行程序
mkdir Debug  
cd Debug  
cmake -DCMAKE_BUILD_TYPE=Debug ..  
make  
# Release  用于有优化的情况下,不使用调试符号 构建可执行程序,生成的文件更小

mkdir Release  
cd Release  
cmake -DCMAKE_BUILD_TYPE=Release ..  
make 

其他的编译选项:
RelWithDeInfo: 较少优化, 包含符号
MinSizeRel :用于不增加目标代码大小的优化方式来构建可执行程序

3、 生成静态和动态库

两者 使用的生成命令略有不同,其余都相同

#动态库, 用 test.c 生成 libtest.so的动态库
add_linrary( test SHARED test.c)
#静态库,生成 libtest.a
add_linrary( test STATIC test.c)
# 链接动态/静态库
target_link_libraries(可执行程序  链接库名(test))

具体结构

(1) CMakeList.txt

cmake_minimum_required (VERSION 3.5)
project (hello_world)
// 用 math.c 生成 libmath.a 的静态库
add_linrary(math STATIC math.c) 
add_executable(hello_world hello.c)
// # 链接库
target_link_libraries(hello_world math)

(2) hello.c

#include <stdio.h>
#include “math.h”
int main()
{
   printf("hello world,1+1=%d\n",add(1,1));
   return 0;
}

(3) math.c

int add(int m, int n)
{
	return m+n;
}

(4) math.h

#ifndef __MATH_H__
#define __MATH_H__
int add(int);
#endif 
// 若没导入 __MATH_H__,则导入,否则不导入

(5) 编译

cmake ../
make

三、Windows下的 Cmake 使用

和 在linux下的使用相同,只是生成的是 .sln, .vcxproj文件。
应用linux下的 1、 基础运行文件,到CMakeLists.txt 文件所在目录,运行 cmake . ,得到 4个文件:
hello_world .sln、 ALL_BUILD.vcxproj、 hello_world .vcxproj、 ZERO_CHECK.vcproj

然后 执行命令 msbuild hello_world.sln
就可以在 build 目录下面找到 hello_world.exe 程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值