如何使用 CMake 来构建一个包含子目录的 C++ 项目
2024-01-08 13:00:36
文章目录
main.cpp
#include <iostream>
/**
* 代码作者:小秋SLAM实战教程
* 开发环境:Ubuntu 16.04
* 运行依赖:C++ 11
*/
int main(int argc, char** argv){
std::cout<<"小秋SLAM实战教程"<<std::endl;
return 0;
}
cmake_tutorial/tutorial_1/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(cmake_tutorial_2)
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)
#这个指令用于向当前工程添加存放源文件的子目录
#为工程添加子目录src放工程源代码
#为工程添加文本readme.md
#为工程添加脚本.sh调用可执行程序
#为工程添加子目录bin放入生成的可执行程序
cmake_tutorial/tutorial_1/src/CMakeLists.txt
# 增加一个可执行的二进制
add_executable(tutorial_2 main.cpp)
# 为工程添加子目录bin放入生成的可执行程序
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
这个示例展示了如何使用 CMake 来构建一个包含子目录的 C++ 项目。在这个项目中,源代码被放置在 src
子目录中,而生成的可执行文件将被放置在 bin
目录中。下面是对 CMakeLists.txt
文件和项目结构的具体解释:
项目结构
项目的结构如下所示:
/cmake_tutorial/tutorial_1
|-- CMakeLists.txt
|-- /src
|-- CMakeLists.txt
|-- main.cpp
根目录的 CMakeLists.txt
位于 cmake_tutorial/tutorial_1
的 CMakeLists.txt
文件负责整个项目的顶级配置。
cmake_minimum_required(VERSION 2.8)
project(cmake_tutorial_2)
# 添加 src 子目录
add_subdirectory(src)
这个文件设置了 CMake 的最低版本要求,定义了项目名称,并且添加了 src
子目录到构建中。
src 目录的 CMakeLists.txt
位于 cmake_tutorial/tutorial_1/src
的 CMakeLists.txt
文件用于配置源代码目录。
# 添加一个可执行文件
add_executable(tutorial_2 main.cpp)
# 指定可执行文件的输出目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
这个文件创建了一个名为 tutorial_2
的可执行文件,并设置了可执行文件的输出目录为项目根目录下的 bin
文件夹。
main.cpp
main.cpp
是程序的入口点,包含主函数。
#include <iostream>
int main(int argc, char** argv) {
std::cout << "小秋SLAM入门实战" << std::endl;
return 0;
}
构建过程
-
创建一个构建目录:在项目根目录中创建一个新目录,例如
build
,用于存放构建文件。 -
运行 CMake:从
build
目录运行cmake ..
命令以生成 Makefile。 -
编译项目:在
build
目录中运行make
命令来编译项目。 -
运行可执行文件:运行位于
bin
目录中的可执行文件。
总结
在这个示例中,我们展示了如何使用 CMake 在包含子目录的项目中构建 C++ 程序。通过将源代码和可执行文件分别放在 src
和 bin
子目录中,项目的结构更加清晰和组织化。这种方法对于管理大型项目特别有用,因为它允许将项目分解成更小、更易于管理的部分。
文章来源:https://blog.csdn.net/qq_21950671/article/details/135442153
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!