淘宝app网站建设,编程猫加盟条件和费用,门户网站建设 请示,如何写销售计划书方案引言 本篇文章讲述如何简单的使用cmake工具构建一个项目#xff0c;帮助入门的c新手学会如何使用cmake.
我们在Clion新创建一个项目时#xff0c;会发现#xff0c;除了main.cpp文件之外#xff0c;还存在一个build-debug目录和一个CMakelists.txt文件#xff0c;如图: …引言 本篇文章讲述如何简单的使用cmake工具构建一个项目帮助入门的c新手学会如何使用cmake.
我们在Clion新创建一个项目时会发现除了main.cpp文件之外还存在一个build-debug目录和一个CMakelists.txt文件如图: CMakelists.txt CMakelists.txt这个文件描述的是这个项目待编译的源文件编译选项库依赖等信息类似于java项目中的maven.简单来说呢Cmakelists.txt就是一个描述你这个项目总结构的一个文件.它默认的结构是这样的 cmake_minimum_required 是指能接受的cmake工具的最低版本 project: 是指该项目的项目名 set: 指的是当前使用的C版本如图目前使用C17 add_executable: 指该项目的项目名和所有待编译的源文件. cmake-build-debug目录 在Clion中默认是这个样子的
那么当我们点击Clion右上角的运行按钮时不仅终端出会输出helloworld的运行结果在cmake-build-debug这个文件夹中也会多出一部分内容,多出的这部分内容是构建的中间文件.
构建过程 当我们在Clion中点击运行按钮的时候Clion会帮助我们自动构建项目但是实际的构建过程是怎样的呢?
1.首先,CMakelists.txt里记录的是这个项目的一个总结构库依赖等信息 我们可以使用cmake命令进行构建
cmake Pathcmake命令会根据Cmakelists.txt里面的内容,在对应的路径下生成一个makefile文件.
Makefile 文件是一个包含构建规则的文本文件它定义了如何将源代码文件转换为可执行文件或库文件。Makefile 文件中包含了目标target、依赖项dependencies和命令commands。目标表示要生成的文件依赖项表示目标所依赖的文件而命令则是执行构建过程的具体命令。
2.通过执行 make 命令Make 工具会读取当前目录下的 Makefile 文件并根据其中的规则和命令来执行构建过程。Make 工具会分析文件的依赖关系检查目标文件和依赖文件的时间戳以确定是否需要重新编译某个文件。然后它会按照规则中定义的命令来执行编译、汇编和链接等操作从而生成最终的可执行文件或库文件。
make path必须有makefile文件才能执行make命令然后就会生成一个可执行文件这个可执行文件就是一个简单项目的运行结果.
Makefile 文件是非常灵活和可定制的你可以根据项目的需要定义自己的规则和命令。通过 Make 工具和 Makefile 文件你可以更加方便地管理和构建 C 项目并确保代码在不同平台上的可移植性。
所以说构建一个项目的大致过程就是
Cmakelists.txt ------makefile-------- project(可执行文件cmake make我们都知道一个纯文本的CPP文件要变成可执行文件是要经历四个过程的分别是 预处理阶段编译阶段汇编阶段链接阶段 那么其实这些过程就是在make命令执行makefile文件中的命令这个阶段中执行的
但是为什么Clion中在build目录下没生成makefile文件呢而是生成了一堆构建的中间文件 这是因为Clion简化了构建过程所以没有生成可读的makefile文件但是它的实际构架过程也是这个过程. 简单的构建例子 如果我们不使用Clion而是直接用命令行运行一个简单项目应该怎么办 1.创建一个项目文件夹
mkdir my_project
cd my_project2.创建一个main.cpp
vim main.cpp随便写点Hello,world之类的3.创建CMakelists.txt文件
vim CMakelists.txt写入
cmake_minimum_required(VERSION 3.24)
project(my_project)
set(CMAKE_CXX_STANDARD 17)
add_executable(my_project main.cpp)4.创建一个build目录
mkdir build
cd build5.执行cmake命令会生成一个makefile
cmake ..6.执行make命令,会生成一个可执行文件
make7.执行可执行文件输出结果
./可执行文件的名字当然这只是一个最简单的例子 下面我们用Clion利用CMakelists.txt写一个稍微复杂一丢丢的项目
接下来我将举一个简单例子来讲一下CMakelists.txt的一些其他用法.
微项目 项目结构 我们创建一个include的目录用来存储头文件因为我们在写C项目时需要有一个习惯就是在.h文件中定义类和函数但是并不写函数体而是在.cpp文件中来完成函数体的部分.
Student.h:
#ifndef UNTITLED8_STUDENT_H
#define UNTITLED8_STUDENT_H
#includestringclass Student
{int age;std::string name;
public:Student(std::string name){this-namename;}std::string get_name();
};
#endif //UNTITLED8_STUDENT_HStudent.cpp
#include Student.hstd::string Student::get_name() {return this-name;
}当写到这里的时候就会出现点问题当我们在写入 #include Student.h的时候会发现这部分代码会标红这是因为使用 Student.h跟Student.cpp不在同一个文件夹之下我们可以使用
#include../include/Student.h来引入这个头文件但是这样太麻烦了我们还是希望使用 #includeStudent.h这样简单的写法所以我们可以在CMakelists.txt文件中写点东西 加上这行之后我们就可以直接使用 #include Student.h来引入了include是头文件所在的目录名. main.cpp
#include iostream
#includeStudent.h
int main() {Student *stu new Student(sunjin,hello);std::coutstu-get_name()std::endl;return 0;
}但是现在又有一个问题我们需要在CMakelists.txt下把Student.cpp也添加上去否则Student.cpp是不会被编译的 我们可以用 aux_source_directory给 ./src下面所有的文件起一个别名然后把这个别名 加入到 add_executable中这样src目录下面一级的所有文件就都能被编译了但是这样并不能编译子目录下的文件需要再用别名.
cmake_minimum_required(VERSION 3.24)project(untitled8)set(CMAKE_CXX_STANDARD 17)include_directories(include)aux_source_directory(./src DIR)add_executable(untitled8 ${DIR})做好这些之后我们可以点击运行键然后就可以运行了也可以自己建一个build目录手动cmake和make. up我不是匠人