用于Ubuntu下用gedit写代码,不使用IDE
原始思路
- 用gedit编辑好代码
- g++编译
- 运行
实例
新建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思路
- gedit编辑好代码
- CMakeLists编辑(相当于g++的命令,但有自己的语法)
- cmake出编译信息,make进行编译
- 运行
修改上述实例
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函数的文件),对于库文件:
- gedit编辑好代码文件
- CMakeLists中添加库
- 编辑头文件,对库文件中的函数进行说明
- 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,水平有限,文章若有错误,欢迎指正!