C++使用CMakeLists.txt跨目录编译多个源文件
本资源主要介绍了如何使用CMakeLists.txt在C++项目中编译不同目录下的多个源文件,以生成可执行文件。项目结构包括一个主目录`CMakeLists3`,其中包含`main.cpp`,以及两个子目录`Add`和`Subtract`,分别用于不同的功能模块。 在C++编程中,当项目变得复杂,源文件分布在多个目录下时,使用CMake作为构建工具可以帮助简化编译过程。CMakeLists.txt是CMake的配置文件,它告诉CMake如何处理项目中的源文件并生成目标可执行文件。 1. CMakeLists.txt的基本结构 CMakeLists.txt文件通常包含以下几个部分: - `cmake_minimum_required(VERSION x.y.z)`: 定义CMake的最低版本要求。 - `project(PROJECT_NAME)`: 声明项目名称。 - `add_subdirectory(DIRECTORY)`: 添加子目录,这里将添加`Add`和`Subtract`两个子目录。 - `include_directories(INCLUDE_DIRS)`: 指定头文件的搜索路径。 - `add_executable(EXECUTABLE_NAME SOURCE_FILES)`: 创建一个可执行文件,指定其名称和源文件。 2. CMakeLists.txt在各个目录的使用 - 主目录`CMakeLists3`中的CMakeLists.txt应该包含对子目录的引用和主程序的编译指示。 - 子目录`Add`和`Subtract`各自有它们自己的CMakeLists.txt,用于管理该目录下的源文件。 3. 示例代码解析 - `main.cpp`包含了项目的主要入口,它引用了`Add`和`Subtract`目录下的头文件,并调用了对应的函数。 - `Add`和`Subtract`目录分别包含对应的实现类,如`Add.cpp`和`Subtract.cpp`,以及头文件`Add.h`和`Subtract.h`。 4. CMakeLists.txt配置示例 主目录`CMakeLists3`可能如下: ```cmake cmake_minimum_required(VERSION 3.10) project(CppMultiDirExample) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Add ${CMAKE_CURRENT_SOURCE_DIR}/Subtract) add_subdirectory(Add) add_subdirectory(Subtract) add_executable(main ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) target_link_libraries(main Add Subtract) ``` 子目录`Add`和`Subtract`的CMakeLists.txt可能非常简单,只需包含它们各自的源文件: ```cmake add_library(Add Add.cpp) add_library(Subtract Subtract.cpp) ``` 5. 编译流程 - 在项目根目录运行`cmake .`,这会生成一个构建目录,比如`build`。 - 进入`build`目录,运行`make`或`cmake --build .`,CMake会根据CMakeLists.txt文件编译源代码并链接成可执行文件。 通过这样的配置,CMake可以有效地管理跨目录的C++项目,使得构建过程更为标准化和便捷。这对于大型项目尤其重要,因为它允许开发人员独立地管理各个模块,而无需关心全局构建系统的细节。
[root@localhost CMakeLists3]# ls
Add CMakeLists.txt main.cpp Subtract
[root@localhost CMakeLists3]# ls Add
Add.cpp Add.h CMakeLists.txt
[root@localhost CMakeLists3]# ls Subtract/
CMakeLists.txt Subtract.cpp Subtract.h
[root@localhost CMakeLists3]#
# 1.创建C++代码
[root@localhost CMakeLists3]# cat main.cpp
/*!
* Copyright (c) 2020,ZYF.
* All Rights Reserved.
*
* \file main.cpp
* \brief C++版本使用CMakeLists.txt编译(同目录多个源文件)可执行文件
*
* \author ZYF
* \date 2020/7/11 10:58:42
* \version 1.0.0
*/
#include <stdio.h>
#include <iostream>
#include "Add/Add.h"
#include "Subtract/Subtract.h"
int main(int argc, char* argv[])
{
int nA = 5;
int nB = 3;
int nAdd = Add(nA, nB);
printf("%d+%d=%d\n", nA, nB, nAdd);
int nSubtract = Subtract(nA, nB);
printf("%d-%d=%d\n", nA, nB, nSubtract);
return 1;
}
[root@localhost CMakeLists3]# cat Add/Add.h
/*!
* Copyright (c) 2020,ZYF.
* All Rights Reserved.
*
* \file Add.h
* \brief 加法类声明
*
* \author ZYF
* \date 2020/7/11 23:28:20
* \version 1.0.0
*/
#include <iostream>
using namespace std;
剩余8页未读,继续阅读
- 粉丝: 18
- 资源: 25
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构