makefile: 如何在.h檔案更新之後,相應的.o檔案能重新編譯
特別是在c++的模板編寫中,因為修改的都是.h檔案。如果makefile 中沒有設定.o檔案依賴於相應的.h檔案,將導致make的時候提示說
make: `bin/runner’ is up to date
y核心就是讓.o檔案能依賴相應的.h檔案。一種簡單的方法就是讓每個.o檔案depend on 所有的.h檔案。但是會導致一個.h檔案更改,所有的.o檔案都要重新編譯。最佳的辦法就是通過編譯器來輸出.o檔案所依賴的所有.h檔案,生成.d檔案。確定每個.o檔案所依賴的.h檔案。下面這個makefile就可以在.h檔案更新的時候重新編譯相應的.o檔案:
CC :=g++
LD :=g++
SRCDIR := src
BUILDDIR := build
TARGET :=bin/runner
SRCEXT:=cpp
SOURCES:=$( shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS:=$(patsubst $(SRCDIR)/%, $(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
DEP:=$(OBJECTS:%.o=%.d)
CFLAGS:= -std=c++11
LDFLAGS:=
INC:= -I include
$(TARGET):$(OBJECTS)
@echo "Linking..."
@echo "$(LD) $^ -o $(TARGET) $(LIB)"
$(LD) -o $(TARGET) $^ $(LDFLAGS)
-include $(DEP)
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@mkdir -p $(sort $(dir $(OBJECTS)))
@echo "$(CC) $(CFLAGS) $(INC) -c -o [email protected] $<"
$(CC) $(CFLAGS) $(INC) -MM -MT [email protected] -MF $(patsubst %.o, %.d, [email protected]) $<
$(CC) $(CFLAGS) $( INC) -c -o [email protected] $<
#$(CC) $(CFLAGS) -MMD -c -o [email protected] $<
clean:
@echo "cleaning...";
@echo "$(RM) -r $(BUILDDIR) $(TARGET)";
$(RM) -r $(BUILDDIR) $(TARGET)
.PHONY:clean
另: 我的工程檔案格式:
├── bin
│ ├── runner
│
├── build
│ ├── main.d
│ ├── main.o
│ ├── str_proc.d
│ └── str_proc.o
├── include
│ └── str_proc.hpp
├── makefile
├── makefile.bak
├── src
├── main.cpp
└── str_proc.cpp
主要參考資料:
相關推薦
makefile: 如何在.h檔案更新之後,相應的.o檔案能重新編譯
特別是在c++的模板編寫中,因為修改的都是.h檔案。如果makefile 中沒有設定.o檔案依賴於相應的.h檔案,將導致make的時候提示說 make: `bin/runner’ is up to date y核心就是讓.o檔案能依賴相應的.h檔案。
闌夕-王堅:說服馬雲之後,還要說服人類
位置 新經濟 國家 工程 吸塵 經濟 李彥宏 無線 信任 據說質問CTO不會寫代碼,最早出自2012年馬雲發在阿裏內網的一張任命王堅為集團CTO的公告貼底下,那是阿裏史上最具爭議的一次人事動作,回帖裏的「不會寫代碼」、「項目一敗塗地」、「當時我就震驚了」排成隊列,齊刷刷的送
draft.js:內容清空之後,游標的位置會錯亂
如果編輯器在沒有失焦的情況下(比如, 使用快捷鍵), 清空編輯框內容 , 替換一個空的editorState, 這時候再輸入內容,游標會出現跑到文字前面去, 以及各種游標錯亂的情況 解決問題的關鍵在於 切換內容的時候,讓編輯器失去焦點 切換完成後,再重新focus
Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登入頁面並登入成功,在Chrome中可以正常顯示登入頁面,登入失敗
問題描述:Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登入頁面並登入成功,在Chrome中可以正常顯示登入頁面,登入失敗 解決方法:將打包後的dist\index.html放到http伺服器上執行就可以登入了。 總結:
Nodejs:npm run build之後,distindex.html頁面在火狐中可以正常顯示登錄頁面並登錄成功,在Chrome中可以正常顯示登錄頁面,登錄失敗
服務 index set npm 解決方法 本地 流程 html csdn 問題描述:Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登錄頁面並登錄成功,在Chrome中可以正常顯示登錄頁面,登錄失敗 解決方法:將打包
Windows10自動更新之後,無線有線都連不上網
大概浪費了我至少6個小時。 一個是無線網絡卡,這個後來可以修復,其實也不是網絡卡的原因。最主要的原因是 Realtek PCIe GBE Family Controller 這個驅動。只找到一個win10版本的,安裝了卻又出現問題。 期間使用了驅動精靈、驅動人生、360驅動大
實現功能:點選選項之後,篩選出對應的產品
實現功能:點選選項之後,篩選出對應的產品 1.注意替換後臺提供的url 2.beforeSend: function(){ $("#xunhuan2").html(""); }, 實現在傳送前,清空內容 3.html
ubuntu16.04 sudo apt-get update 更新之後,提示無法下載package,404 not found,已經解決。
1 前段時間用自己的筆記本給TX1刷機,因為網路的問題也是折騰了好久才弄好。後來也沒有管,這幾天更新ubutu源,提示有錯誤。 2 百度找了各種辦法:(1)換源,阿里源,官方源,清華 中科大 都試過了 (2)在軟體更新中換源,並且把其他軟體中的連結都勾掉了。(3)換網路,不
簡潔版:java獲取時間之後,對比開始時間和結束時間,對比活動狀態
@Transient 當前時間的獲取 public String getStatus(){Date now = new Date();if (getStartTime().before(now) && getEndTime().after(now))
異常:安裝完Hadoop之後,命令列輸入hadoop卻找不到命令的解決方法
大多數原因是沒有配置環境變數解決方法 1. vim /etc/profile 2. 把這三條加到proflie檔案的最後export JAVA_HOME=XXXX(在安裝了jdk的前提下,echo $JAVA_HOME可以檢視得到)export HADOOP_HOME=XXX
實踐:使用了CompletableFuture之後,程式效能提升了三倍
CompletableFuture 相比於jdk5所提出的future概念,future在執行的時候支援非同步處理,但是在回撥的過程中依舊是難免會遇到需要等待的情況。 在jdk8裡面,出現了CompletableFuture的新概念,支援對於非同步處理完成任務之後自行處理資料。當發生異常的時候也能按照自定義的
git push報錯檔案過大,去掉大檔案也報同樣的錯誤
原因:大檔案存在沒有被提交的commit記錄裡面 解決方案:刪除有大檔案的commit記錄即可 我的解決流程 1 git status 產看未被傳送到遠端程式碼庫的提交次數 2 git cherry -v 檢視未被傳送到遠端程式碼庫的提交描述和說明 3 git res
vuecli開發專案,檔案打包後,appjs/vendorjs檔案過大
專案上線後,瀏覽器第一次載入會特別特別慢,network中看到vendorjs檔案1.9M,不慢才怪。 echarts按需引入後,也有1.1M左右,由於對vue腳手架理解不深,自己扒了大量的文件,又測 試了很多次,才測試成功,暫時簡單記錄下。 npm run build --report 可
django設定並獲取cookie/session,檔案上傳,ajax接收檔案,post/get請求及跨域請求等的方法
django設定並獲取cookie/session,檔案上傳,ajax接收檔案等的方法: views.py檔案: from django.shortcuts import render,HttpResponse,redirect import datetime import json from
Spring Boot 單檔案,多檔案上傳,以及將檔案寫入響應中
單檔案上傳 配置檔案設定 @Component public class MultipartConfig { @Bean public MultipartConfigElement multipartConfigElement(){ Multipa
生成二維碼,返回檔案位元組碼,或將檔案轉成base64返回
@PostMapping("/admin/get/qrcode") public ResponseEntity<byte[]> getQrcode(Long id,boolean need
使用Restful api庫之後,異常日誌不能列印的問題(實習日誌)
主要是因為Restful API在http方法之上封裝了一層_exe()方法,異常資訊在這個方法中已經被捕獲了,導致web 的requesthandler的_handle_request_exception(e)不能執行,異常的traceback都是在這個方法中
網易筆試題:輸入一個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。
解題思路: **找到數學規律。n以i為開頭的j個整數的和為i*j+j*(j-1)/2;判斷輸入的整數是否和計算結果相同。 如果相同則迴圈輸出以i為開頭的j個整數。 這個題目給我最大的啟示就是要學會用數學的方法來解決問題,在此之前我一直希望通過一種遞
【shell】對指定資料夾中檔案進行過濾,並修改檔案內容的shell指令碼
編寫shell指令碼,對某個資料夾內搜尋指定檔案並對檔案內容進行更改: 在桌面建立shell_test資料夾 進入shell_test資料夾,建立5個測試檔案 在shell_test資料夾中再建立一個666資料夾,繼續再建立5個檔案,如圖: 分
阿里雲伺服器安裝RabbitMQ之後,外網不能訪問
今天在阿里雲伺服器上安裝了一個RabbitMQ,安照網上的教程一步一步的安裝之後,發現外網就是訪問不了,經過一番查資料才發現是被阿里雲伺服器的安全規則攔截了,他們的安全規則預設只開了22、3389和-1這三個埠,而mq的15672埠是不允許訪問的,需要配置安全規則才可以訪問。