一個能自動搜尋原始檔並自動推導的Makefile
今天看了一天的makefile的寫法,東拼西湊,好不容易寫出了一個makefile,頗有成就感,記錄下來,以備溫習之用。
假設有兩個標頭檔案目錄 header1,header2;兩個cpp檔案目錄,src1,src2,一個lib目錄
寫一個完整的makefile步驟如下:
1 定義可執行檔案的名稱
TARGET = Main
2 指定此編譯工程所要使用的標頭檔案所在的目錄
INC = -Iheader1 -Iheader2
3 指定cpp檔案所在的目錄
VPATH = .:src1:src2
4 指定所有的cpp檔案
SRC_PATH = $(foreachdir,$(subst :, ,$(VPATH)),$(wildcard $(dir)/*.cpp))
解釋:
foreach,subst,wildcard為makefile的內建函式,其中wildcard函式為字串連線函式,把函式中的兩個引數連線成一個。subst是字串替換函式,在此句中意思是把VPATH變數中的冒號替換成空格。foreach函式,就是把subst函式的返回值,以空格為分隔符,迴圈取值賦給dir,然後接受wildcard的處理。
這句的總體意思是:從VPATH中獲取每個目錄,並分別找出此目錄下所有的cpp檔案,賦給SRC_PATH變數。
5 定義中間object檔案存放的目錄。
OBJ_DIR = ./obj
6 所有的object檔案要按照和原始碼對應的目錄存放,定義object檔案的目錄
OBJ_PATH = $(addprefix $(OBJ_DIR)/, $(subst :, ,$(VPATH) ) )
解釋:
addprefix函式是加字首的函式,詞句中是給VPATH中所有已經定義的目錄加上./obj/的字首。
7 定義連線成目標檔案所需要的所有的object檔案的名稱
OBJS = $(addprefix $(OBJ_DIR),$(subst.cpp,.o,$(SRC_PATH)))
8 建立一個object檔案的目錄
MAKE_OBJECT_DIR := $(shell mkdir -p$(OBJ_DIR) $(OBJ_PATH))
*************************
9 定義實用的編譯器
CXX = g++
CXXFLAGS = -g
10 定義目標檔案的生成規則
$(TARGET) : $(OBJS)
$(CXX) -o [email protected] $(OBJS) $(INC)$(CXXFLAGS)
11 定義object檔案的生成方式:
$(OBJ_DIR)/%.o : %.cpp %.cpp.d
$(CXX) -o [email protected] -c $< $(INC) $(CXXFLAGS)
12 定義.cpp.d檔案的生成方式
DEPS = $(OBJS:.o=.cpp.d)
$(DEPS) : $(OBJ_DIR)/%.cpp.d : %.cpp
$(CXX) $< -MM $(INC) >$(OBJ_DIR)/$<.d
13 定義清理函式
clean:
@rm -rf ./obj
@rm -rf $(TARGET)
至此,一個通用的makefile完成了,如果增加原始碼目錄和標頭檔案目錄,只需要在INC變數和VPATH變數處加上此目錄即可。中間object檔案和檔案的依賴關係自動生成。
相關推薦
一個能自動搜尋原始檔並自動推導的Makefile
今天看了一天的makefile的寫法,東拼西湊,好不容易寫出了一個makefile,頗有成就感,記錄下來,以備溫習之用。 假設有兩個標頭檔案目錄 header1,header2;兩個cpp檔案目錄,src1,src2,一個lib目錄 寫一個完整的makefile步驟如下:
一個能夠自動匹配檔案並編譯的makefile
AllDirs := $(shell ls -R | grep '^\./.*:$$' | awk '{gsub(":","");print}') . Sources := $(foreach n,$(AllDirs) , $(wildcard $(n)/*.cpp)) Objs := $(pats
shell監控網站是否自動運行並自動重啟【原創】
自動重啟 aid func 服務腳本 date null com 監控網頁 moni shell監控網站是否自動運行並自動重啟 #!/bin/bash wget --spider -q -o /dev/null --tries=1 -T 5 www.baidu.co
mybatis 根據 資料庫表 自動生成 實體 並自動生成中文註釋
原文地址:https://www.cnblogs.com/NieXiaoHui/p/6094144.html (將原文copy到此處,怕原作者刪除,順便記錄實際操作中我遇到的問題) 原文: 專案裡新建表時model,mapper以及mapper.xml基本都是用Myba
自動抓取並解析一個商品頁
以美國adidas官網為例。 輸入url,抓取商品資訊(標題、描述、圖片等);抓取屬性資訊(顏色、尺碼、價格、庫存、skuId)。 思路很簡單,就是開啟頁面,分析各個需要內容的標籤。 獲取頁面 public static Document get
WPF彈出一個視窗,並自動關閉
最近用WPF做了一個小的demo,由於對於WPF不是很熟悉,在這個過程中遇到不少問題,這篇文章便是針對某個小需求的整理,這個需求便是:在WPF中,如何彈出一個視窗,並讓它定時自動關閉。 我記得我最早的思路是在主視窗中開啟一個執行緒,這個執行緒每隔1s休眠一次,用這個執行緒來
通過node指令自動建立一個package.json檔案,並封裝釋出使用
這一部分將通過node init指令來快速建立一個package.json檔案,大家可以清楚的看到如何自動建立一個包檔案,以便後續的使用。畢竟package.json檔案還是蠻大的,手動建立免不了多麻煩呢。 劃重點 使用命令 npm init 示例 如果需要
android 搜尋自動匹配關鍵字並設定器顏色
SpannableString s = new SpannableString(item.getString); LogUtil.E("keyword:"+keyWord); Pattern p = Pattern.compil
XVideo 一個能自動進行壓縮的小視訊錄製庫
XVideo 一個能自動進行壓縮的視訊錄製庫 關於我 特徵 支援自定義小視訊錄製時的視訊質量。 支援自定義視訊錄製的介面。 支援自定義最大錄製時長和最小錄製時長。 支援自定義屬性的視訊壓縮。 演示(請star支援)
自動搜尋不同位置的properties檔案並載入
在專案開發中,對於一些程式執行的引數可能經常需要根據實際情況修改或調整,所以這些引數我們不會在程式碼中寫死,而是它們儲存在properties(或xml)檔案中,以方便修改。這時就需要智慧載入要配置檔案,如何智慧載入,我想要的載入順序: 1. jar包所在目錄(載入jar
C# 利用FTP自動下載xml文件後利用 FileSystemWatcher 監控目錄下文件變化並自動更新數據庫
use img div 進行 ssa reg c# col without using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel;
獲取bing圖片並自動設置為電腦桌面背景(使用 URLDownloadToFile API函數)
href 一次 top tel tmp load 1.0 ace 國際 眾所周知,bing搜索網站首頁每日會更新一張圖片,張張漂亮(額,也有一些不合我口味的),特別適合用來做電腦壁紙。 我們想要將bing網站背景圖片設置為電腦桌面背景的通常做法是: 上網,搜索b
Swift - 判斷是否有某功能訪問權限,沒有則提示,並自動跳轉到設置頁
權限 cells key 選擇 href ref options title kit 由於 iOS 系統的安全限制,App 如果需要訪問設備的通訊錄、麥克風、 相冊、 相機、地理位置等時,需要請求用戶是否允許訪問。 有時用戶不小心點了“不允許”,後面可能就不知道要去
Win10子系統開機啟動並自動啟動ssh
win spa ans script.sh 興趣 log article windows 人的 首先在任意盤符下創建一個vbs腳本,文件名隨意,內容如下: Set ws = CreateObject("Wscript.Shell") ws.run "bash -c ‘sh
使用node自動刷房源並發送可入住房源到郵箱
腳本 配置 href 天上 option save pass true html 因為住的地方離公司太遠,每天上下班都要坐很久的班車,所以最近想搬到公司旁邊的皖水公寓住。去問了一下公寓的客服,客服說房源現在沒有了,只能等到別人退房,才能在網站上申請到。 如果純靠手動F5刷
自動識別是手機訪問還是電腦訪問並自動跳轉到相應版本
能判斷是電腦端還是手機端的javascript,自動跳轉到手機wap版網站:http://m.fjwd9.com/ 方法一: try { var urlhash = window.location.hash;
方案優化:網站實現掃描二維碼關註微信公眾號,自動登陸網站並獲取其信息
用戶 class his onerror 就會 openid display 要點 rac 上一篇 《網站實現掃描二維碼關註微信公眾號,自動登陸網站並獲取其信息》 中已經實現用戶掃碼登陸網站並獲取其信息 但是上一篇方案中存在一個問題,也就是文章末尾指出的可以優化的地方(可
vs中添加工具cmder並自動定位到當前目錄
png git ron 技術分享 分享 文件夾 命令行 body 目錄 有時在vs中為了使用git命令行,需要打開cmder工具,並讓cmder自切換到當前目錄: 方法1: 看下效果: 方法2:在文件夾中右鍵(添加到右
jenkins 自由風格構建war包,並自動部署(jenkins和tomcat同一臺機器)
jenkins 自由風格 環境:centos7.3 ip:192.168.216.130 參考 http://www.cnblogs.com/h--d/p/5682030.html一 在正式構建之前需要先設置下jenkins1 點擊Manage Jenkins,然後點擊Global Tool
2、ROS實時檢測在線IP數並自動對IP做限速
ROS1、將在線IP自動添加到地址列表2、實時檢測在線IP數3、自動對IP做限速實時檢測在線IP數:local s 0:foreach i in=[/ip firewall address-list find list=Online] do={:set s ($s+1)}:log warning ("