JuenTingShie   ·  5月前
4 貼文  ·  2 留言

再續前言: Makefile 的編寫

前情調要

Cpp 找不到 opencv 的那些解決方法

#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 介紹與範例程式:

  • $<:代表目前的相依性項目。
  • $@:目前的目標項目名稱。 "項目目標"就是 main.exe,而相依性項目就是後面寫的 main.cpp 與 stopWatch.o,
    當我下指令:
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平行運算的部分,那就...先這樣?

I'm out

  分享   共 231 次點閱
按了喜歡:
共有 0 則留言
還沒有人留言。歡迎分享您的觀點、或是疑問。
您的留言
JuenTingShie
4 貼文  ·  2 留言

HPCL菜渣

查看所有文章