首先是makefile 檔案和include資料夾還有src資料夾在同乙個目錄下
標頭檔案hello.h在include目錄下
原始檔main.cpp和hello.cpp在src目錄下
hello.h:
#ifndef _hello_h__
#define _hello_h__
void hello();
#endif
/#include
#include"hello.h"
using namespace std;
void hello()
/main.cpp:
#include
#include"hello.h"
using namespace std;
int main()
/makfile:
#vpath=include:src
vpath %.cpp src
vpath %.h include
test:main.o hello.o
g++ -o $@ main.o hello.o
main.o:main.cpp hello.h
g++ -c $< -iinclude
hello.o:hello.cpp hello.h
g++ -c $< -iinclude
.phony:clean
clean:
-rm test hello.o
//因為makefile、hello.h hello.cpp main.cpp沒有在同乙個路徑,所以要考慮路徑的問題
同時,路徑也有兩種,一種是針對makefile來說在執行make命令的時候,要尋找目標檔案和依賴檔案的路徑
另乙個就是原始檔所要包含的標頭檔案等相關檔案的路徑。
對於第一種來說,makefile 提供了兩種方式,一種是設定全域性訪問路徑vapth:即在執行make命令時可以從該路徑中查詢目標和依賴make可識別乙個特殊變數「vpath」。通過變數「vpath」可以指定依賴檔案的搜尋路徑,
在規則的依賴檔案在當前目錄不存在時,make會在此變數所指定的目錄下去尋找這些依賴檔案。
一般我們都是用此變數來說明規則中的依賴檔案的搜尋路徑。其實「vpath」變數所指定的是
首先說明一下makefile的執行步驟:
1、讀入所有的makefile。
2、讀入被include的其它makefile。
3、初始化檔案中的變數。
4、推導隱晦規則,並分析所有規則。
5、為所有的目標檔案建立依賴關係鏈。
6、根據依賴關係,決定哪些目標要重新生成。
7、執行生成命令
makefile中所有檔案的搜尋路徑,包括依賴檔案和目標檔案。
變數「vpath」的定義中,使用空格或者冒號(:)將多個目錄分開。make 搜尋的目錄順序
按照變數「vpath」定義中順序進行(當前目錄永遠是第一搜尋目錄)。
例如:vpath = src:../headers
它指定了兩個搜尋目錄,「src」和「../headers」。對於規則「foo:foo.c」如果「foo.c」在「src」
目錄下,此時此規則等價於「foo:src:/foo.c」
對於第二種來說:當需要為不型別的檔案指定
不同的搜尋目錄時需要這種方式
vpath:關鍵字
它所實現的功能和上一小節提到的「vpath」變數很類似,但是
它更為靈活。它可以為不同型別的檔案(由檔名區分)指定不同的搜尋目錄。它的使用方法有三
種1、vpath pattern directories
為符合模式「pattern」的檔案指定搜尋目錄「directories」。多個目錄使用空格或者
冒號(:)分開。類似上一小節的「vpath」
2、vpath pattern
清除之前為符合模式「pattern」的檔案設定的搜尋路徑
3、vpath
清除所有已被設定的檔案搜尋路徑。
對於vpath的詳細說明待續。
在執行make命令的時候,根據makefile執行步驟,首先讀入所有的makefile檔案,那麼
vpath = include:src //指定了makefile的搜尋路徑
或者vpath %.h include //指定.h型別檔案的搜尋路徑是include
vpath %.cpp src //指定.cpp型別檔案的搜尋路徑是src
這僅僅是對於makefile來說搜尋目標和依賴檔案的路徑,但是對於命令列來說是無效的,也就是說
在執行g++或者gcc時不會自動從vpath 或者vpath中自動搜尋要包含的標頭檔案等資訊檔案
此時要用到了 -i 或者--incude +路徑
例如依賴是:
main.o:main.cpp hello.h
即g++ -c $< -iinclude,這時候,g++會自動從include目錄中搜尋要包含的hello.h標頭檔案
例項:vpath += $(wildcard $(src)/*) $(wildcard $(src)/*/*) $(wildcard $(src)/*/*/*) #設定依賴檔案的搜尋路徑
$(c_objects_ddr): $(obj)/%.o: %.c makefile #靜態模式中%.c中的.c檔案搜尋規則為先在makefile當前目錄找,如果沒有則在vpath指定目錄找
echo cc $<
$(cc) $(cflags) -c $< -o $@
OrCAD VCC5V和VCC3 3V 短路問題
經常遇到乙個很奇怪的問題,10.5版本畫的原理圖在用高版本如16.3 16.5開啟後會出現5v和3.3v短路的情況,這樣drc檢查不會報錯,若到pcb layout時依然不能發現此問題,則會導致pcb板上的電源5v和3.3v連到一起。如下圖 圖1 經過反覆的實驗發現了原因 運放的電源pin一般都命名...
1V公升壓5V和1 5V公升壓5V的積體電路晶元
1.5v和1v輸入,要公升壓輸出5v的積體電路晶元合適?乾電池標準電壓是1.5v,放電電壓後面在0.9v 1v左右,如果要選用乾電池1.5v公升壓到5v的合適的晶元,需要滿足低壓1v或者0.9v更好的低壓輸入範圍的公升壓晶元。pw5100是輸入電壓範圍在0.7v低壓,到5v的寬範圍輸入電壓。適用於乾...
18V轉3 3V的電源晶元和40V的LDO
18v轉3.3v,15v轉3.3v的ldo pw6206的輸入電壓4.75v 40v,負載電流為在電壓 5v和vin 7v時高達300ma。該裝置採用bcd工藝製造。pw6206 提供過電流限制 軟啟動和過溫保護,確保裝置工作在正常情況下。pw6206提供3v,3.3v,5v輸出電壓選擇,靜態電流4...