Makefile 中會在多處地方看到 FORCE

2022-05-02 10:42:07 字數 2820 閱讀 4896

**:

在核心的 makefile 中會在多處地方看到 force ,比如:

# vmlinux image -including updated kernel symbols

vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) force

實際上它是乙個偽目標:

phony +=force

force:

# declare the contents of the .phony variable

asphony. we keep that

# information

in a variable so we can use it in

if_changed and friends.

.phony: $(phony)

從上面看到,force 既沒有依賴的規則,其底下也沒有可執行的命令。

如果乙個規則沒有命令或者依賴,而且它的目標不是乙個存在的檔名,在執行此規則時,目標總會被認為是最新的。也就是說,這個規則一旦被執 行,make 就認為它所表示的目標已經被更新過。當將這樣的目標(force)作為乙個規則的依賴時(如上的 vmlinux: ),由於依賴總被認為是被更新過的,所以作為依賴所在的規則定義的命令總會被執行。

比如上面的 vmlinux: 在每次 make 時,它下面的這些命令總會被執行:

ifdef config_headers_check

$(q)$(make)-f $(srctree)/makefile headers_check

endif

ifdef config_samples

$(q)$(make) $(build)=samples

endif

ifdef config_build_docsrc

$(q)$(make) $(build)=documentation

endif

$(call vmlinux-modpost)

$(call if_changed_rule,vmlinux__)

$(q)rm -f .old_version

用乙個直觀的例子可以清楚看到這一點,比如有 1 makefile 檔案:

helloworld:file1.o file2.o

gcc file1.o file2.o -o helloworld

file1.o:file1.c file2.h

gcc -c file1.c -o file1.o

file2.o:file2.c file2.h

gcc -c file2.c -o file2.o

clean:

rm -rf *.o helloworld

phony +=force

force:

.phony: $(phony)

[beyes@slinux makefile]$ ll

total

32-rw-rw-r--. 1 beyes beyes 129 apr 16

19:00

file1.c

-rw-rw-r--. 1 beyes beyes 924 apr 16

20:20

file1.o

-rw-rw-r--. 1 beyes beyes 108 apr 16

19:01

file2.c

-rw-rw-r--. 1 beyes beyes 139 apr 16

18:49

file2.h

-rw-rw-r--. 1 beyes beyes 880 apr 16

20:20

file2.o

-rwxrwxr-x. 1 beyes beyes 4786 apr 16

20:20

helloworld

-rw-rw-r--. 1 beyes beyes 246 apr 16

20:20 makefile

helloworld 檔案的生成時間是 20:20

如果將上面的 makefile 檔案的 helloworld:file1.o file2.o 這一句後面加個 force,那麼再過幾分鐘後再

make 時,再觀察一下 helloworld 的生成時間,可以看到是重新生成的了,當然在 make 執行時命令的輸出也能知道該命令被再次執行:

[beyes@slinux makefile]$ ll

total

32-rw-rw-r--. 1 beyes beyes 129 apr 16

19:00

file1.c

-rw-rw-r--. 1 beyes beyes 924 apr 16

20:20

file1.o

-rw-rw-r--. 1 beyes beyes 108 apr 16

19:01

file2.c

-rw-rw-r--. 1 beyes beyes 139 apr 16

18:49

file2.h

-rw-rw-r--. 1 beyes beyes 880 apr 16

20:20

file2.o

-rwxrwxr-x. 1 beyes beyes 4786 apr 16

20:26

helloworld

-rw-rw-r--. 1 beyes beyes 246 apr 16

20:20 makefile

WEB中會話跟蹤

一 什麼叫會話跟蹤 記錄使用者一段時間內的邏輯上相關聯的不同訪問請求個過程叫 會話跟蹤 通過使用者在每次對服務請求時的唯一標識,可以跟蹤會話。二 會話跟蹤產生的原因 我們都知道internet通訊協議可以分為有狀態協議和無狀態協議,而我們在www上進行的訪問http協議是乙個無狀態協議,這種協議無法...

Wicket中會話管理HttpSession

最近用wicket框架,要用到session,而wicket中定義的session與以前常說的session httpsession 是不一樣。具體解釋摘錄 wicket開發指南 而httpsession完全不同,它儲存的是使用者在訪問乙個 期間的會話資訊。ok,在wicket開發時,我們也會用到h...

Nodejs中會話技術(cookie)

var express require express express var cookieparser require cookie parser 初始化cookie 注意 想要給cookie加密,需要加入鹽,不加密則不需要。use cookieparser jhh 為cookie設定值 get ...