VScode环境下使用CMake构建工程

本文详细介绍如何在VSCode环境中使用CMake构建C/C++工程,包括多文件工程构建、静态/动态链接库生成及使用外部库的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VS code环境下使用CMake构建工程

本文主要介绍vscode环境下使用CMake构建工程的详细用法,包含多文件工程的构建,静态链接库/动态链接库文件的生成,外部库文件的使用。

1. C/C++多文件工程构建

工程目录结构如下,将头文件放在include中,.c文件放在src目录下,每一个包含源文件(.c/.cpp)的文件夹如果工程需要使用,则都需要通过add_subdirectory的方式添加到工程中。项目的根目录下需要有一个CMakeLists.txt,用来配置工程信息,建立和子目录的联系,每一个包含源码的子目录也都需要一个CMakeLists.txt

D:.
│  CMakeLists.txt
│  main.c
├─build
├─include
│      hello.h
└─src
        CMakeLists.txt
        hello.c

在工程目录下mian.c文件中调用src文件下的hello.c文件中的函数

hello.h文件放在include 文件夹中

工程中的CMakeLists.txt文件如下

cmake_minimum_required(VERSION 3.0.0)
project(multiFileTest VERSION 0.1.0)

include(CTest)
enable_testing()

#包含头文件
include_directories(include)

#工程目录下的原文件,命名为ROOT_SOURCE
aux_source_directory(. ROOT_SOURCE)

#指定一个子目录src,制定了src,cmake才回去src中找CMakeList
add_subdirectory(src)

#添加可执行文件,生成一个目标文件,取名为hello
add_executable(hello ${ROOT_SOURCE} ${HELLO_SRC})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

src子目录下的CMakeLists.txt内容如下

#子目录下的源文件,取名为HELLO_SRC,让父级目录可见
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} HELLO_SRC)
set(HELLO_SRC ${HELLO_SRC} PARENT_SCOPE)

2. 制作静态/动态链接库文件

工程目录结构如下

D:.
│  CMakeLists.txt
├─build
└─lib
        CMakeLists.txt
        myhello.c
        myhello.h

hello.chello.h编译成静态和动态链接库文件,供外部使用

工程目录下的CMakeLists.txt内容如下,只用包含注释的两句话是必要的,后面的install可安装也可不安装:

cmake_minimum_required(VERSION 3.0.0)
#工程设置
project(myhello VERSION 0.1.0)

include(CTest)
enable_testing()

#包含源文件,生成的可执行文件放在bin文件中
add_subdirectory(lib bin)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

install(FILES hello.h DESTINATION include/hello)
install(TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)

lib目录下的CMakeLists.txt内容如下,同时生成动态库和静态库:

set(LIB_SRC  myhello.c)

add_library(hello_static  STATIC ${LIB_SRC})

set_target_properties(hello_static PROPERTIES OUTPUT_NAME "hello" )
set_target_properties( hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1 )

add_library(hello SHARED ${LIB_SRC})
set_target_properties(hello PROPERTIES OUTPUT_NAME "hello")
set_target_properties( hello PROPERTIES CLEAN_DIRECT_OUTPUT 1 )

这个实例是使用C文件做的库,在C++中调用,.c和.h文件内容如下

//.c文件如下
#include  "myhello.h"
#include  <stdio.h>

void  helloFun()
{
    printf("helloWorld!");
}

//.h文件如下
#ifndef  _MYHELLO_H
#define  _MYHELLO_H

#ifdef  __cplusplus
extern "C"{
 #endif

extern  void  helloFun(void);

#ifdef  __cplusplus
}
#endif

#endif

编译链接之后生成了libhello.alibhello.dll

3. 使用外部库文件构建工程

工程目录结构如下:

D:.
│  CMakeLists.txt
│  main.cpp
├─build
├─include
│      myhello.h
└─lib
        libhello.a
        libhello.dll

工程目录下的main.cpp内容如下:

#include <iostream>
#include "myhello.h"

int main(int, char**) {
    helloFun();
}

工程目录下的CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.0.0)
project(mytest VERSION 0.1.0)

include(CTest)
enable_testing()

include_directories(include)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)

LINK_DIRECTORIES(lib)

add_executable(mytest main.cpp)

target_link_libraries(mytest libhello.dll)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

4. CMake常用指令

#设置最低cmake版本
cmake_minimum_required(VERSION 3.0.0)

#配置项目信息
project(mytest VERSION 0.1.0)

#搜索当前目录下所有源文件
aux_source_directory(. ROOT_SOURCE)

#包含头文件
include_directories(include)

#包含链接库目录
LINK_DIRECTORIES(lib)

#包含工程子目录
add_subdirectory(src)

#生成可执行文件
add_executable(mytest main.cpp)

#生成静态链接库
add_library(hello_static  STATIC ${LIB_SRC})

#生成动态链接库
add_library(hello SHARED ${LIB_SRC})

#链接库文件,注意链接库文件必须在生成可执行文件之后
target_link_libraries(mytest libhello.dll)

#配置编译类型
set(CMAKE_BUILD_TYPE Debug)

5. 填坑

在vscode下使用CMake构建工程,使用cmake quick start之后,自动生成了main.cpp文件,CMakeLists.txt文件和build文件夹,在构建工程的过程中不要删除build文件夹,如果删除之后重新建build文件夹,然后cmake…,则会出现错误:

The CMAKE_C_COMPILER:
    cl
is not a full path and was not found in the PATH.

编译器找不到了,这是则需要重新配置cmake工程,右键CMakeLists.txt,清除项目重新配置即可

调试过程中,在build文件下编译链接,不要删除build文件夹的内容

使用外部链接库文件时,如果提示使用的函数未定义,检查目标文件是否链接库target_link_libraries

undefined reference to .......

如果提示找不到库,检查库文件路径是否包含,LINK_DIRECTORIES

cannot find -lhello ......

找不到头文件,检查头文件是否包含

No such file or directory
 #include "myhello.h"
          ^~~~~~~~~~~

_link_libraries`

undefined reference to .......

如果提示找不到库,检查库文件路径是否包含,LINK_DIRECTORIES

cannot find -lhello ......

找不到头文件,检查头文件是否包含

No such file or directory
 #include "myhello.h"
          ^~~~~~~~~~~
### 配置和使用 CMake 在 Visual Studio Code 中进行项目构建 #### 安装必要的软件包 为了能够在 Visual Studio Code (VSCode) 中顺利使用 CMake 进行开发工作,需安装几个重要的组件。这包括但不限于 CMake 和 MinGW 或其他编译器工具链[^1]。 #### 安装 VSCode 插件 对于提升工作效率而言,在 VSCode 上安装 `CMake Tools` 扩展是非常推荐的做法。该扩展提供了针对 CMake 项目的配置、构建以及调试等功能的支持;同时配合 `vs.language.cmake` 使用能够进一步增强编辑体验[^2]。 #### 初始化 CMake 项目 当一切准备就绪之后,可以在终端内通过如下命令来初始化一个新的 CMake 构建目录: ```bash cmake -S ./ -B build/ -G "MinGW Makefiles" ``` 上述指令指定了源码路径(`-S`)为当前文件夹,并创建了一个名为 `build` 的子文件夹作为目标输出位置(`-B`),最后指定生成器(`-G`)为适用于 Windows 平台下的 MinGW 工具集[^3]。 #### 设置 VSCode 环境变量 为了让 VSCode 能够识别并自动完成后续操作,建议按照官方文档指引设置好相应的环境变量与默认选项。通常情况下只需要确保全局范围内已正确设置了 CMake 及所需编译器的位置即可正常运作。 #### 创建简单的 C++ 文件测试流程 编写一段基础代码保存至 `.cpp` 文件中,接着利用之前建立好的构建系统执行编译过程。完成后便可以通过启动程序验证整个集成开发环境是否搭建成功。 ```cpp #include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; } ``` #### 自动化任务管理 借助于 VSCode 提供的任务功能(Task),还可以定义自定义脚本来简化日常重复性的劳动。比如一键清理缓存、重新生成中间产物或是打包发布版本等等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值