makefile的使用方法(简单视频教程以及详细文字教程)
生活随笔
收集整理的這篇文章主要介紹了
makefile的使用方法(简单视频教程以及详细文字教程)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1、makefile詳細文字教程
- 2、makefile簡單教程(B站視頻教程)
- makefile基本語法格式:
- 簡單示例(單文件)makefile寫法
- 帶包含關系的多文件makefile寫法(包含1個文件)
- 在需要發布源碼時,編譯后刪除可執行文件和.o鏈接文件的makefile指令(make clean)
- 帶包含關系的多文件makefile寫法(包含>=2個文件)
- makefile指定編譯器CC(名字自己定)
- 增加自定義參數
- 多個主函數編譯生成多個可執行文件的makefile寫法(all指令)
1、makefile詳細文字教程
Linux makefile 教程 非常詳細,且易懂
原文:跟我一起寫 Makefile(有什么不懂可以跳轉到原文評論區答疑解惑)
2、makefile簡單教程(B站視頻教程)
參考教程視頻鏈接:教程:Makefile的寫法
makefile基本語法格式:
簡單示例(單文件)makefile寫法
新建文件main.cpp
#include <iostream>using namespace std;int main(){cout << "success!" << endl;return 0; }新建文件makefile,跟.cpp文件放一起
main:main.cg++ main.c -o main終端運行
make結果:
帶包含關系的多文件makefile寫法(包含1個文件)
yg@ubuntu:~/arnold_test/20210911_makefileTest2$ tree . ├── main.c ├── makefile ├── tool.c └── tool.hmain.c
#include "tool.h" #include <stdio.h>int main(){int arr[] = {1,8,3,4,5};int m = find_max(arr,5);printf("max = %d\n",m);return 0; }tool.c
#include "tool.h"int find_max(int arr[], int n){int m = arr[0];int i;for(i=0; i<n; i++){if(arr[i] > m){m = arr[i];}}return m; }tool.h
#pragma onceextern int find_max(int arr[], int n);多文件時,寫makefile一般從后往前寫
makefile
main:main.c tool.ogcc main.c tool.o -o maintool.o:tool.cgcc -c tool.c編譯:
yg@ubuntu:~/arnold_test/20210911_makefileTest2$ make gcc -c tool.c gcc main.c tool.o -o main yg@ubuntu:~/arnold_test/20210911_makefileTest2$ yg@ubuntu:~/arnold_test/20210911_makefileTest2$ tree . ├── main ├── main.c ├── makefile ├── tool.c ├── tool.h └── tool.o.o是鏈接文件
在需要發布源碼時,編譯后刪除可執行文件和.o鏈接文件的makefile指令(make clean)
在后面加上這一句:
clean:rm *.o mainmakefile
main:main.c tool.ogcc main.c tool.o -o maintool.o:tool.cgcc -c tool.cclean:rm *.o main這樣在我們使用make指令編譯后,再使用make clean指令,就能將生成的main和tool.o刪除
yg@ubuntu:~/arnold_test/20210911_makefileTest2$ make clean rm *.o main yg@ubuntu:~/arnold_test/20210911_makefileTest2$ tree . ├── main.c ├── makefile ├── tool.c └── tool.h0 directories, 4 files yg@ubuntu:~/arnold_test/20210911_makefileTest2$帶包含關系的多文件makefile寫法(包含>=2個文件)
yg@ubuntu:~/arnold_test/20210911_makefileTest2$ tree . ├── bar.c ├── bar.h ├── foo.c ├── foo.h ├── main.c └── makefile0 directories, 6 files yg@ubuntu:~/arnold_test/20210911_makefileTest2$main.c
#include "foo.h" #include "bar.h" #include <stdio.h>int main(){int arr[] = {1,2,3,4,5};printf("min = %d\n", find_min(arr, 5));printf("max = %d\n", find_max(arr, 5)); return 0; }bar.c
#include "bar.h"int find_min(int arr[], int n){return 1; }foo.c
#include "foo.h"int find_max(int arr[], int n){return 10; }bar.h
int find_min(int arr[], int n);foo.h
int find_max(int arr[], int n);makefile
main:main.c bar.o foo.ogcc main.c bar.o foo.o -o mainbar.o:bar.cgcc -c bar.cfoo.o:foo.cgcc -c foo.cclean:rm *.o main運行結果:
yg@ubuntu:~/arnold_test/20210911_makefileTest2$ make gcc -c bar.c gcc -c foo.c gcc main.c bar.o foo.o -o main yg@ubuntu:~/arnold_test/20210911_makefileTest2$ ls bar.c bar.h bar.o foo.c foo.h foo.o main main.c makefile yg@ubuntu:~/arnold_test/20210911_makefileTest2$ make clean rm *.o main yg@ubuntu:~/arnold_test/20210911_makefileTest2$makefile指定編譯器CC(名字自己定)
makefile
CC = gccmain:main.c bar.o foo.o$(CC) main.c bar.o foo.o -o mainbar.o:bar.c$(CC) -c bar.cfoo.o:foo.c$(CC) -c foo.cclean:rm *.o main增加自定義參數
多個主函數編譯生成多個可執行文件的makefile寫法(all指令)
代碼略
makefile
CC = gccall:main_min main_maxmain_min:main_min.c bar.o$(CC) main_min.c bar.o -o main_minmain_max:main_max.c foo.o$(CC) main_max.c foo.o -o main_maxbar.o:bar.c$(CC) -c bar.cfoo.o:foo.c$(CC) -c foo.cclean:rm *.o main_min main_max運行結果:
yg@ubuntu:~/arnold_test/20210911_makefileTest2$ make gcc -c bar.c gcc main_min.c bar.o -o main_min gcc -c foo.c gcc main_max.c foo.o -o main_max yg@ubuntu:~/arnold_test/20210911_makefileTest2$ tree . ├── bar.c ├── bar.h ├── bar.o ├── foo.c ├── foo.h ├── foo.o ├── main_max ├── main_max.c ├── main_min ├── main_min.c └── makefile0 directories, 11 files yg@ubuntu:~/arnold_test/20210911_makefileTest2$ make clean rm *.o main_min main_max yg@ubuntu:~/arnold_test/20210911_makefileTest2$ ls bar.c bar.h foo.c foo.h main_max.c main_min.c makefile yg@ubuntu:~/arnold_test/20210911_makefileTest2$總結
以上是生活随笔為你收集整理的makefile的使用方法(简单视频教程以及详细文字教程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c/c++源文件为何要包含自己的头文件?
- 下一篇: 文本文件与二进制文件及编码关系