一开始初学 C++ 的时候免不了用 IDE,但是有时候我只是想用控制台做一点小测试,不需要用特地用 IDE 来构建一个项目,如果能够一句命令行就能运行就好了。本文将会讲述如何从零开始用命令行构建 C++,以下操作均在 mac/linux 环境下运行,
准备工作
要构建 C++ 的话,需要编译器和构建工具,编译器我们使用 g++,而构建工具则使用 make。如果没有这两样工具的话我们需要打开命令行,运行下面命令。
# for mac
brew install g++
brew install make
# for linux
sudo apt-get g++
sudo apt-get make
命令行 Hello world!
我们先开始创建我们的第一个 c++ 文件。
mkdir hello-project
cd hello-project
touch main.cpp
然后通过编辑器输入以下内容。
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
然后创建构建规则文件 makefile,这个文件将告诉系统如何构建程序,具体的 make 教程可查看 Make 命令教程 ,和我之前写的一篇文章 Makefile的使用。
touch makefile
修改 makefile 文件内容,对于 g++ 的构建可参考 gcc编译过程,其构建命令和 gcc 基本一样。
## 通过 g++ 构建文件 main.cpp,生成文件默认为 a.out
## 带冒号那一行是下面命令的代称,为了避免有文件与之重名,所以加上 .PHONY
.PHONY: program
program:
g++ main.cpp
.PHONY: clean
clean:
rm *.o *.out
最后我们通过命令行根据 makefile 构建,并运行。
# make 会默认寻找当前目录下名叫 makefile 的文件,并按照规则构建
make source
# 运行!
./a.out
用命令行构建类!
上面只有一个文件,但是我们大多数情况需要构建多个文件,我们以构建一个 Person 类为例,在 main.cpp 里面 使用 Person 类。
首先我们创建 Person.h。
#ifndef PERSON_H
#define PERSON_H
#include <string>
using std::string;
class Person{
private:
string _name;
public:
string getName();
void setName(string name);
}
#endif
然后创建 person.cpp。
#include "Person.h"
string Person::getName(){
return this->_name;
}
void Person::setName(string name){
this->_name = name;
}
在 main.cpp 中使用 person。
#include <iostream>
#include "Person.h"
using namespace std;
int main()
{
Person person;
person.setName("Gay");
cout << person.getName() << endl;
return 0;
}
修改 makefile。
.PHONY: program
program: main.o person.o
g++ main.o person.o -o program
main.o: main.cpp person.h
g++ -c main.cpp -o main.o
person.o: person.cpp person.h
g++ -c person.cpp -o person.o
.PHONY: clean
clean:
rm *.o program
最后运行,搞定!
make
./program