1. 程式人生 > >makefile: 如何在.h檔案更新之後,相應的.o檔案能重新編譯

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

Nodejsnpm run build之後dist\index.html頁面在火狐中可以正常顯示登入頁面並登入成功在Chrome中可以正常顯示登入頁面登入失敗

問題描述:Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登入頁面並登入成功,在Chrome中可以正常顯示登入頁面,登入失敗   解決方法:將打包後的dist\index.html放到http伺服器上執行就可以登入了。   總結:

Nodejsnpm 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 更新之後提示無法下載package404 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埠是不允許訪問的,需要配置安全規則才可以訪問。