linux下Makefile的简单例子及解释

对于大一点的项目,Makefile都是不可或缺的,这里记录一个自己弄的简单的例子。

有3个file: main.cpp main2.cpp main2.h

main.cpp    --    main函数所在,调用main2.cpp中的一个外部函数test()

main2.cpp  --    test函数所在

main2.h     --    test的函数声明

看一下三个文件:

//main.cpp
#include <iostream>
#include "main2.h"
using namespace std;

void test();

int main()
{
    int a = 1;
    test();
}
//main2.cpp
#include <iostream>
#include "main2.h"
using namespace std;

void test()
{
    cout<<"test in main2.cpp"<<endl;
}
//main2.h
#ifndef _MAIN2_H_
#define _MAIN2_H_

void test();

#endif

流程是:

main2.cpp -> main2.o

main.cpp   -> main.o

main.o + main2.o  ->  main(可执行文件)

那么Makefile这样写:

main: main.o main2.o
    g++ -o main main.o main2.o

main.o: main.cpp main2.h
    g++ -o main.o -c main.cpp

main2.o: main2.cpp main2.h
    g++ -o main2.o -c main2.cpp

clean:
    rm *.o main

其中g++所在的行,就是执行编译的命令。

其中带有冒号 : 的行,意思是如果冒号后面有文件更新了,那么就执行下一行g++命令更新冒号前的那个内容。冒号前的内容depend on冒号后的内容。

clean就是清除中间文件和最终文件。

原文地址:https://www.cnblogs.com/lihaozy/p/2629706.html