学习了一点Linux下编译程序的知识,这里总结一下在Ubuntu下使用CMake创建一个工程的一般流程,记录一下详细步骤。

(1)建立一个Test文件夹(作为根目录):

~$ mkdir test

(2)进入test文件夹,分别创建include和src文件夹,同时创建CMakeLists.txt文件:

~$ cd test/
~/test$ mkdir include
~/test$ mkdir src
~/test$ touch CMakeLists.txt

建立完成后,结构如下图所示:

如何创建一个既支持cmake也支持python的功能包 cmake创建文件夹_头文件

其中,include文件夹用于存放各种头文件,src文件夹主要存放各种源代码文件,CMakeLists.txt文件是编译文件,描述如何编译代码等。

(3)进入src目录下,分别新建两个cpp文件:useHello.cpp和libHello.cpp,前者为包含main函数的主文件,后者为库文件,它们的文件内容如下:

(3-1) useHello.cpp
#include "../include/libHello.h"
// 使用 libHello.h 中的 printHello() 函数
int main( int argc, char** argv )
{
printHello();
return 0;
}
(3-2) libHello.cpp
//这是一个库文件
#include 
using namespace std;
void printHello()
{
cout<
}

注意:useHello.cpp文件中引用libHello.h头文件需要把路径写正确,否则会提示No such file or directory的错误;

(4)进入test/include路径下,新建一个libHello.h头文件,其内容如下:

#ifndef LIBHELLO_H_
#define LIBHELLO_H_
// 上面的宏定义是为了防止重复引用这个头文件而引起的重定义错误
void printHello();
#endif
(5)最后是修改test文件夹下的CMakeLists.txt文件,其内容如下:
# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )
# 声明一个 cmake 工程
project( Hello )
# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )
# 添加一个库
add_library( hello src/libHello.cpp )
# 共享库
add_library( hello_shared SHARED src/libHello.cpp )
# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( useHello src/useHello.cpp )
# 将库文件链接到可执行程序上
target_link_libraries( useHello hello_shared )
注意:add_library中添加源文件要写相对路径,即src/libHello.cpp,同样的,
add_executable中添加的源文件也要写相对路径,即src/useHello.cpp,否则会提示No such file or directory的错误。
(6)回到根目录,即Test文件夹下,右键点击Open in Terminal,并输入以下指令:
~$ mkdir build
~$ cd build
~$ cmake ..
~$ make

这里新建了一个中间文件夹“build”,然后进入 build 文件夹,通过 cmake .. 命令,对上一层文件夹,也就是代码所在的文件夹进行编译。这样cmake 产生的中间文件就会生成在 build 文件夹中,与源代码分开。当我们发布源代码时,只要把 build 文件夹删掉即可。

(7)上一步编译完成之后,会在build文件夹下生成一个useHello的可执行文件,执行如下指令即可运行得到结果:

~$./useHello

Hello World

(8)上面这个C++工程经过编译之后的简单架构图如下:(查看结构指令见这里)

如何创建一个既支持cmake也支持python的功能包 cmake创建文件夹_txt文件_02

其中,build文件夹的内容都是编译过程产生的,可以直接将build文件夹删掉,再执行第6步可重新编译。

标签:src,useHello,CMake,流程,libHello,文件夹,build,Linux,cpp