Devs.tw 是讓工程師寫筆記、網誌的平台。歡迎您隨手紀錄、寫作,方便日後搜尋!
#bash
g++ main.cpp -o main.exe -I /usr/include/opencv4/ -L /usr/lib -lopencv_core -lopencv_imgcodecs stopWatch.o -I inc
今天的目標是將這個 command line 寫成 Makefile 。
而前情提要內的程式碼在這篇內有些修改的部分,全部以本篇為準!
在昨天大學長給的 command line 可以成功編寫之後,我就在想要怎麼將這些命令列寫成Makefile(達成偷懶的目的)
再次列出檔案結構好了:
.
├── inc
│ └── stopWatch.h
├── main.cpp //主檔案
├── Makefile //今日主角
└── src
└── stopWatch.cpp //計算時間用的cpp
那就開始吧!
首先是用到的 stopWatch.h 與 opencv :
#include "inc/stopWatch.h"
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
在 Makefile 裡面
g++ main.cpp -o main.exe -I /usr/include/opencv4/ -L /usr/lib -lopencv_core -lopencv_imgcodecs stopWatch.o -I inc
轉換成=>
CXX = g++
CXXFLAGS = -Wall -g -std=c++11
CVPATH=/usr/include/opencv4/
LIBS=-lopencv_core -lopencv_imgcodecs
stopWatch.o: src/stopWatch.cpp
$(CXX) $(CXXFLAGS) -c $< -I inc
main.exe: main.cpp stopWatch.o
$(CXX) $(CXXFLAGS) $< -o $@ -I $(CVPATH) -L /usr/lib $(LIBS) stopWatch.o -I inc
go: main.exe
./main.exe resize.png
clean:
rm -rf *.a *.o *.exe
g++ main.cpp -o main.exe -I /usr/include/opencv4/ -L /usr/lib -lopencv_core -lopencv_imgcodecs stopWatch.o -I inc
\ \ / / /
$(CXX) $(CXXFLAGS) $< -o $@ -I $(CVPATH) -L /usr/lib $(LIBS) stopWatch.o -I inc
用CXX取代g++,
把CVPATH以及LIBS縮短成關鍵字
引述自簡單學 makefile:makefile 介紹與範例程式:
make go
的時候, Makefile 就會先去找 "go" 需要的東西有沒有存在?
=> OK, main.exe 不存在,那我要做出"他"
=> main.exe 相依於 main.cpp 與 stopWatch.o,main.cpp在了,但是 stopWatch.o 不存在,做出stopWatch.o
=> stopWatch.o 相依於 src/stopWatch.cpp,檔案存在。
於是就這樣,Makefile 在一層一層的找檔案與做檔案之間,幫我們完成整個編譯的動作。
之後會再加上用OpenMP平行運算的部分,那就...先這樣?