一只虾和cmake的初次相遇

用于Ubuntu下用gedit写代码,不使用IDE

  • 原始思路

    1. 用gedit编辑好代码
    2. g++编译
    3. 运行
  • 实例
    新建HelloWorld.cpp文件,键入下面简单的代码片

#include <iostream>
using namespace std;
int main()
{   cout<<"Hello World!"<<endl;
return 0;
}

终端中cd到当前文件夹,输入以下指令进行编译
g++ HelloWorld.cpp

可以看到生成了一个a.out的文件,输入以下指令运行
./a.out
在终端中输入a.out会提示无此命令,通常运行可执行文件要连带文件夹,./表示当前文件夹
虽然成功运行,但工程较大时,g++编译指令将十分复杂,因此采用cmake方法,它根据makefile来进行编译

  • cmake思路

    1. gedit编辑好代码
    2. CMakeLists编辑(相当于g++的命令,但有自己的语法)
    3. cmake出编译信息,make进行编译
    4. 运行
  • 修改上述实例
    HelloWorld.cpp不变;新建CMakeLists.txt文件,键入下述代码片

#版本要求
cmake_minimum_requred(VERSION 2.8)

#声明工程
project(MyHello)

#添加可执行程序
add_executable(welcome HelloWorld.cpp)

保存后,在存放有CMakeLists.txt的文件夹里cmake, make
即可完成编译过程,并且得到可执行程序,仍用上面提到的‘./文件名’方式来运行

cmake .
make
./welcome

可以看到,编译过程中生成了一些中间文件,这些是可以不需要的,因此,新建一个build文件夹,用来存放编译生成的中间文件,操作如下:

#新建build文件夹并进入
mkdir build
cd build

#编译上层目录(因为CMakeLists在上层)
cmake ..
make
./welcome

一个工程中,有可执行文件和库文件(即不含main函数的文件),对于库文件:

  1. gedit编辑好代码文件
  2. CMakeLists中添加库
  3. 编辑头文件,对库文件中的函数进行说明
  4. main函数中添加头文件

例如新建如下代码片,命名为LibHelloWorld.cpp

#include <iostream>
using namespace std;
void libprint()
{
cout<<"We use library to print 'Hello World'"<<endl;
}

在CMakeLists.txt中添加add_library(libHelloWorld LibHelloWorld.cpp)
并将库libHelloWorld链接到可执行程序welcome中target_link_libraries(welcome libHelloWorld)
(注意格式哦~有兴趣的话可以看看cmake的语法^^)

新建LibHelloWorld.h头文件

#ifndef LIBHELLOWORLD_H_
#define LIBHELLOWORLD_H_
void libprint();
#endif

再在主程序HelloWorld.cpp中添加#include 'LibHellowWorld.h'
大功告成!

mkdir build
cd build
cmake ..
make
./welcome

即可实现输出不同函数的hello world啦~
本人初始cmake,水平有限,文章若有错误,欢迎指正!

猜你喜欢

转载自blog.csdn.net/sinat_28752257/article/details/79118912