欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 完整的 VS Code + CMake + Qt + GCC 项目构建方案:EXE 程序与多个 DLL 库

完整的 VS Code + CMake + Qt + GCC 项目构建方案:EXE 程序与多个 DLL 库

2025/11/19 0:01:18 来源:https://blog.csdn.net/weixin_44455665/article/details/147651465  浏览:    关键词:完整的 VS Code + CMake + Qt + GCC 项目构建方案:EXE 程序与多个 DLL 库

完整的 VS Code + CMake + Qt + GCC 项目构建方案:EXE 程序与多个 DLL 库

在本文中,我们将介绍如何构建一个包含 EXE 程序和多个 DLL 库的项目,适用于 VS Code + CMake + Qt + GCC 开发环境。这个方案为一个模块化的项目结构,使得代码清晰且易于扩展和维护。

项目目录结构

首先,我们设计一个典型的项目目录结构,它将 EXE 程序、多个 DLL 库和公共头文件分开管理。以下是我们推荐的目录结构:

my_project/
├── CMakeLists.txt                # 根 CMake 配置文件
├── build/                        # 编译输出目录 (由 CMake 创建)
├── src/                          # 源代码目录
│   ├── exe/                      # EXE 程序代码目录
│   │   ├── main.cpp              # 主程序源代码
│   │   ├── mainwindow.cpp        # 主窗口源代码(如果有)
│   │   └── mainwindow.h          # 主窗口头文件(如果有)
│   └── dlls/                     # DLL 库代码目录
│       ├── lib1/                 # 第一个 DLL 库
│       │   ├── lib1.cpp          # DLL 库源代码
│       │   └── lib1.h            # DLL 库头文件
│       ├── lib2/                 # 第二个 DLL 库
│       │   ├── lib2.cpp          # DLL 库源代码
│       │   └── lib2.h            # DLL 库头文件
│       └── lib3/                 # 第三个 DLL 库(如果有)
│           ├── lib3.cpp          # DLL 库源代码
│           └── lib3.h            # DLL 库头文件
├── include/                      # 公共头文件目录
│   ├── lib1.h                    # 第一个 DLL 库的公共头文件(如果有)
│   └── lib2.h                    # 第二个 DLL 库的公共头文件(如果有)
├── lib/                          # 编译出来的 DLL 库文件目录
│   ├── lib1.dll                  # 第一个 DLL
│   ├── lib2.dll                  # 第二个 DLL
│   └── lib3.dll                  # 第三个 DLL
├── resources/                    # 资源文件目录(如图像、样式等)
│   └── logo.png                  # 资源文件示例
└── .vscode/                      # VS Code 配置文件└── settings.json             # VS Code 的个性化设置

CMake 配置

项目的构建依赖于 CMake,每个子项目(EXE 和 DLL)都有独立的 CMake 配置文件。接下来,我们来逐一讲解如何配置根目录和各个子项目的 CMakeLists.txt 文件。

1. 根目录的 CMakeLists.txt

在根目录下的 CMakeLists.txt 文件中,我们配置全局设置,包括查找 Qt 库、引入子目录等:

cmake_minimum_required(VERSION 3.10)project(MyProject)# 设置公共头文件目录
include_directories(include)# 查找 Qt 库
find_package(Qt5 REQUIRED Widgets)# 添加子目录
add_subdirectory(src/exe)
add_subdirectory(src/dlls)

在此文件中,我们设置了 公共头文件目录 (include/),并使用 find_package() 查找所需的 Qt 库。add_subdirectory() 则将 EXE 和 DLL 子项目引入进来。

2. EXE 项目的 CMakeLists.txt

接下来是 EXE 程序的 CMake 配置。EXE 程目依赖于多个 DLL 库和 Qt 库,所以需要在 CMakeLists.txt 文件中配置相应的源代码文件和链接库。

src/exe/CMakeLists.txt 示例:

# 设置 EXE 程序源代码
set(SOURCESmain.cppmainwindow.cpp
)# 创建可执行文件
add_executable(MyExe ${SOURCES})# 设置 EXE 项目包含头文件路径
target_include_directories(MyExe PRIVATE ${CMAKE_SOURCE_DIR}/include)# 链接 Qt 库
target_link_libraries(MyExe Qt5::Widgets)# 如果 EXE 需要链接 DLL 库
target_link_libraries(MyExelib1lib2
)

在此文件中:

  • set(SOURCES ...) 指定了 EXE 程序的源代码文件。
  • add_executable(MyExe ${SOURCES}) 创建了一个可执行文件。
  • target_include_directories() 用于设置 EXE 程序的头文件路径。
  • target_link_libraries() 用于链接 Qt 库和 DLL 库。
3. DLL 项目的 CMakeLists.txt

每个 DLL 库也有自己的 CMakeLists.txt 文件。以下是第一个 DLL 库 lib1 的配置文件示例:

src/dlls/lib1/CMakeLists.txt 示例:

# 设置 DLL 库源代码
set(SOURCESlib1.cpp
)# 创建共享库(DLL)
add_library(lib1 SHARED ${SOURCES})# 设置 DLL 库包含头文件路径
target_include_directories(lib1 PRIVATE ${CMAKE_SOURCE_DIR}/include)# 链接 Qt 库(如果需要)
target_link_libraries(lib1 Qt5::Widgets)

该文件的作用是:

  • 使用 add_library(lib1 SHARED ...) 创建 DLL 库。
  • 使用 target_include_directories() 来指定头文件路径。
  • 使用 target_link_libraries() 来链接 Qt 库(如果需要)。

你可以按照相同的方式为其他 DLL 库(如 lib2lib3)编写相应的 CMake 配置。

4. 公共头文件目录

公共的头文件存放在 include/ 目录下,例如 lib1.hlib2.h。为了确保 EXE 和 DLL 项目能够正确引用这些头文件,我们需要在 CMakeLists.txt 中配置头文件路径。

在根目录的 CMakeLists.txt 中,使用 include_directories(include) 来设置公共头文件目录。每个子项目则通过 target_include_directories() 来确保能够访问这些头文件。

编译与链接

  1. 编译 DLL:每个 DLL 库通过 add_library(lib1 SHARED ${SOURCES}) 创建,并生成 .dll 文件。编译后的 DLL 文件会存放在 lib/ 目录中。

  2. 编译 EXE:EXE 程序会通过 target_link_libraries() 来链接需要的 DLL 库,最终生成 EXE 文件并放在 build/ 目录中。

  3. 链接 Qt 库:所有项目(EXE 和 DLL 库)都需要链接 Qt 库,确保界面能够正常运行。

VS Code 配置

为了在 VS Code 中顺利开发,我们需要在 .vscode/ 目录下配置一些基本的设置。例如:

{"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools","CMake.configureOnOpen": true,"cmake.buildDirectory": "${workspaceFolder}/build"
}

这会确保 VS Code 使用 CMake 作为构建系统,并且在打开项目时自动配置和构建。

总结

通过这个方案,我们为一个包含 EXE 程序和多个 DLL 库的项目提供了清晰的结构。每个子项目都可以独立编译和链接,同时共享公共的头文件和库文件。这样的设计使得代码模块化、易于维护,并且便于扩展新的功能。对于使用 VS Code + CMake + Qt + GCC 环境的开发者,这种结构非常适用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词