cmake-将源文件编译为可执行文件

准备工作

首先我们准备三个文件
add.h

int add(int a,int b);

add.cpp

int add(int a,int b)
{
    return a+b;    
}

main.cpp

#include "add.h"
#include <iostream>
int main()
{
    int a = 2, b = 3;
    std::cout<<add(a,b)<<std::endl;
    return 0;    
}

创建cmake文件

 我们创建一个CMakeLists.txt的文件,文件的名称区分大小写,必须命名为CMakeLists.txt,CMake才能够解析。
首先看一下我们的目录结构,在外层有一个CMakeLists.txt文件。
在这里插入图片描述
首先我们来编写最外层的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.20)
project(cmake_study)
add_subdirectory(lesson1_1)

第一行,设置CMake所需的最低版本。如果使用的CMake版本低于该版本,则会发出致命错误。
第二行,声明了项目的名称(cmake_study)。
第三行,添加包含的子文件夹。
这时候cmake会认为进入了子文件夹中,所以这时候我们来看一下子文件夹中的CMakeLists.txt文件的编写。

add_executable(lesson1_1 main.cpp add.cpp)

 指示CMake创建一个新目标:可执行文件lesson1_1。这个可执行文件是通过编译和链接源文件main.cpp和add.cpp生成的。CMake将为编译器使用默认设置,并自动选择生成工具。
 这个过程类似于厨师炒菜,需要原材料指定给他,他就可以根据这些原材料做出你想要的菜。

编译源代码

现在,可以通过创建build目录,在build目录下来配置项目:

$ mkdir -p build
$ cd build
$ cmake ..
[main] 正在配置项目: cmake_study 
[proc] 执行命令: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SC:/cmake_study -Bc:/cmake_study/build -G "Visual Studio 17 2022" -T host=x64 -A x64
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: C:/cmake_study/build
[visual-studio] 为 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat 修补从 C:\Program Files (x86)\Windows Kits\10\bin\x64 到 C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64 的 Windows SDK 路径

如果一切顺利,项目的配置已经在build目录中生成。我们现在可以编译可执行文件:
使用命令cmake --build .就可以生成.exe文件
在这里插入图片描述

需要的文件不在同一个文件夹的情况

我们经常会遇到需要编译的文件在不同文件夹的情况
在这里插入图片描述
这时候我们需要修改我们的cmake文件

include_directories(../lesson1_1)
add_executable(lesson1_2 main.cpp ../lesson1_1/add.cpp)

include_directories命令用于指定包含的头文件路径。
在这里插入图片描述
总而言之,编写cmake最核心的内容就是让厨师可以找到所有的原材料来进行炒菜。

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake是一个跨平台的开源构建工具,它可以用于自动生成各种不同编译系统的构建文件(如Makefile、Visual Studio项目等),从而实现跨平台的代码构建。CMake支持静态编译,即将所有依赖的库都链接到生成的可执行文件中,使得可执行文件在其他机器上运行时不再依赖外部的动态链接库。 在使用CMake进行静态编译时,可以通过设置CMake变量来指定静态编译的方式。其中,使用CMake的`-D`选项可以设置变量的值。对于静态编译,可以使用`-D BUILD_SHARED_LIBS=OFF`来禁用动态链接库的构建,同时使用`-D CMAKE_EXE_LINKER_FLAGS="-static"`来指定链接器使用静态链接。 下面是一个示例的CMakeLists.txt文件,展示了如何使用CMake进行静态编译: ```cmake cmake_minimum_required(VERSION 3.0) project(MyProject) # 设置编译类型为Release set(CMAKE_BUILD_TYPE "Release") # 禁用动态链接库的构建 set(BUILD_SHARED_LIBS OFF) # 设置链接器使用静态链接 set(CMAKE_EXE_LINKER_FLAGS "-static") # 添加源文件 add_executable(MyExecutable main.cpp) # 添加其他依赖库 target_link_libraries(MyExecutable PRIVATE library1 library2) ``` 在上述示例中,通过设置`BUILD_SHARED_LIBS`变量为`OFF`来禁用动态链接库的构建,通过设置`CMAKE_EXE_LINKER_FLAGS`变量为`-static`来指定链接器使用静态链接。然后,通过`add_executable`命令添加源文件,并通过`target_link_libraries`命令添加其他依赖库。 希望以上信息能够帮助到你!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值