語法簡介,plist文件的设置含义

作者: 关于计算机  发布:2019-11-16

Makefile 語法簡介,makefile

有微微在 Linux 下碰過程式設計的開發者應該會知道,make 是用來將程式碼、函式庫、標頭檔及此外資源檔 build 成最終成果(即:最終的應用程式卡塔尔的超強力輔助理工科程师具。

當然了,並不是非得動用到 make 能力 build 程式,或許有什麼程式設計魔人喜歡什麼都友好手動進行;但接收 make 及其參考檔(輸入檔案卡塔尔Makefile將會讓整個編譯职业輕鬆許多。若你曾經打包過 Debian Package,那麼應該會發現 debuan/rule 這個檔案的語法和 Makefile 幾乎是一模黄金时代樣,所以學習 Makefile 的語法對於 Debian Package Maintainer 来说也是黄金时代門须求的功課。

 

  1. Application does not run in background(键名:UIApplicationExistsOnSuspend)
    自打iOS4.0之後,當你在應用程式執行的時候按下Home 鍵,應用程式並不會中斷近些日子的執行,而是躲到背景去了。因而期望使用者在按下Home鍵之後就要中斷近些日子程式的執行,請勾選這個選項。

  2. Application requires iPhone environment(键名:LSRequiresIPhoneOS)
    iOS的家门繫ㄌㄧ誒主要包罗了HTC,苹果平板,iPod Touch這三種設備。由此只要你的應用程式只好在一加環境下行使的話,請勾選這選項。

  3. Application supports iTunes file sharing(键名:UIFileSharingEnabled)
    在iTunes9.1之後的本子增添了大器晚成個檔案分享的意义,只要打開 info.plist裡面包车型客车這個選項,然後把你要分享的檔案儲存在Documents目錄裡面,就能够在iTunes裡面包车型地铁應用程式標籤頁看见這份文件。

  4. Application uses Wi-Fi(键名:UIRequiresPersistentWiFi)

Makefile 語法:

以下為 Makefile 的基本語法:

註解:
以 # 開頭的即為註解。

比方您的應用程式必要动用的WiFi來連線的話,那麼你能够開啓這個作用。當使用 者在執行這個應用程式的時候並未開啓WiFi,这麼在畫面上會自動跳出對話框供给開啓WiFi。

變數发布:(有人稱之為巨集卡塔 尔(英语:State of Qatar)

語法:
MACRO = value
變數名稱為大小寫相異。在慣例上,Makefile 內部使用的變數名稱使用小寫;而使用者很可能從命令列自行另外指定數值的變數,像是 CFLAGS,則是使用大寫。利用 MACRO = 來取消該變數。
在 Makefile 中,可利用 $(MACRO) 或 ${MACRO} 來存取已定義的變數。例:
targets = foo$(targets): common.h    gcc -o $(targets) foo.c

功效等同:

foo: common.h    gcc -o foo foo.c
  1. Bundle creator OS Type code(键名:CFBundleSignature)

:= 語法

注意到,make 會將整個 Makefile 展開後,再決定變數的值。也就是說,變數的值將會是整個 Mackfile 中最後被指定的值。例:
x = fooy = $(x) barx = xyz# y 的值為 xyz bar

在上例中,y 的值將會是 xyz bar,而不是 foo bar

你能够采纳 := 來避開這個問題。:= 表示變數的值決定於它在 Makefile 中的地点,并不是整個 Makefile 展開後最終的值。

x := fooy := $(x) barx := xyz# y 的值為 foo bar

在上例中,y 的值將會是 foo bar,而不是 xyz bar 了。

CFBundleSignature是生机勃勃個四個字母長度的字串,用以代表開發者對於應用程式的標識。比如: 在黄金年代個文字編輯的應用程式,你能够標識為”ttext”。

?= 語法:

?= 是一個簡化的語法:若變數未定義,則替它指定新的值。否則,採用原有的值。例:
FOO ?= bar

若 FOO 未定義,則 FOO = bar;若 FOO 已定義,則 FOO 的值維持不變。

  1. Bundle display name(键名:CFBundleDisplayName)
    應用程式本土壤化学的顯示名稱,預設值為${PRODUCT_NAME}。這個變數能够在雙敲擊Targets後出現的專案設定畫面中期维改正,找到”Product Name”後校勘為你的產品名稱就能够了,編譯後的.app也會以這個名稱命名。

  2. Bundle identifier(键名:CFBundleIdentifier)

+= 語法:

例:
CFLAGS = -Wall -gCFLAGS += -O2

此時 CFLAGS 的值就變成 -Wall -g -O2 了。

用來標示應用程式的唯大器晚成ID,日常是以反向的DNS方式命名的,
例 如:com.myCompany.myApp,這個名稱應該在iTunes Connect裡面新扩张的應用程式ID生龙活虎致。

define 語法:

使用 define 語法的唯一優點是它可以讓變數直接使用『斷行』。例:
define foouname -aecho $$SHELLendefall:        $(foo)

上例能够視同於:

foo = uname -a; echo $$SHELLall:        $(foo)

静心到在上例中选择了 $$,讓 '$' 能傳到 Shell 中。

  1. Bundle name(键名:CFBundleName)

在 target 裡另外钦点變數的值

可以在 target 裡另外指定變數的值。例:
foo = abcall: foo = xyzall:        echo $(foo)        # 此時,foo 的值為 xyz

以下的語法提供了和上例相近的功用:

all: override foo = xyz
all: export foo = xyz

make 也得以存取環境變數。例:

all:    @echo $(CFLAGS)

在上例中,雖然在 Makefile 裡雖然沒有钦赐 CFLAGS 的值,但 make 會試圖以環境變數來代出 CFLAGS 的值。

可搭配 wildcard 指令在變數裡展開 * ? [...] 等萬用字元。例:

objects=$(wildcard *.o)

``

應用程式的短名稱,平日正是你的應用程式名稱。

規則:(Rule)

指示 make 如何進行編譯。
主要語法:
target: dependencies<Tab>Commands
target: dependencies; Commands
<Tab>Commands
Rule 指示了 make 如何建立 target;及何時要重新建立 target。
target:所要建立的檔案< /td>
dependencies:相依項目。 make 會據此決定是否要重新編譯 target
Commands:建立 target 的指令。

在 Makefile 裡並沒有节制 Rule 的先後順序。但預設上,make 會參考 all 這個目標項目,並依據它的 dependencies 來決定要奋发有为哪些項目。若沒有 all 項目,則會採用 Makefile 裡的第生机勃勃個項目。

target:(目標項目)
這個項目所要建立的檔案,必須以 : 結尾。例:
foo.o: common.h    gcc -c foo.c

其中,foo.o 是這個項目要创设的檔案;common.h 是相依性的項目/檔案;而 gcc -c foo.c 則為要產生這個項目所要執行的下令。

make 在編譯時,若發現 target 比較新,也就是 dependencies 都比 target 舊,那麼將不會重新创造 target,如此能够幸免不须求的編譯動作。

若該項目並非檔案,則為 fake 項目。如此生机勃勃來將不會创建 target 檔案。但為了幸免 make 有時會無去判斷 target 是还是不是為檔案或 fake 項目,建議利用 .PHONY 來钦赐該項目為 fake 項目。例:

.PHONY: cleanclean:    rm *.o

在上例中,若不行使.PHONY 來指定 clean 為 fake 項指标話,若目錄中同時存在了后生可畏個名為 clean 的檔案,則 clean 這個項目將被視為要建立 clean 這個檔案,但 clean 這個項目卻又沒有任何的 dependencies,也因此,clean 項目將永遠被視為 up-to-date,永遠不會被執行。 

因為利用了 .PHONY 來指定 clean 為 fake 項目,所以 make 不會去檢查目錄中是还是不是存在了意气风发個名為 clean 的檔案。如此也足以提昇 make 的執行功用。

其余類以 .PHONY 的語法請參考:

GNU `make': 4.9 Special Built-in Target Names

除此以外,若是某個非 fake 項目标 target 的 dependencies 蕴含了 fake 項目标話,因為 make 一定會執行 fake 項目,這樣后生可畏來,這個非 fake 項指标 target 一定也會被執行。這大概不是美好的做法。

  1. Bundle OS Type code(键名:CFBundlePackageType)
    用來標識整個封包的(bundle)的類型。在Mac裡面,生机勃勃個封包只怕是生龙活虎個檔案或目錄,其 指标在於將軟體使用到的資源包在一齐。举个例子應用程式應標識為APPL。

  2. Bundle version(键名:CFBundleVersion)
    用以標識編譯版本(Bundle number),你能够运用别的字串格式來表示這個版本。举例使用风流倜傥個數字來表示編譯次數。

  3. Bundle version string,short (键名:CFBundleShortVersionString)
    應用程式的本子,平时是以三個數字來表示版本號,比如:1.0.1。

  4. Executable architectures(键名:LSExcutableArchitectures)
    為生龙活虎個陣列形態的設定值。用以設�*****绦袚蹩梢赃行的架構環境,举个例子:i386,ppc,ppc64,x86_64

  5. Executable file(键名:CFBundleExecutable)執行檔的名稱。

  6. Fonts provide by application(键名:`UIAppFonts)為风华正茂個陣列形態的設定值。用來钦定應用程式所采用的外界字型。你可以在應用程式內使用自身的字型 檔,只要將字型檔案参与到專案內,在設定值钦点字型檔名稱就能够在程式碼裡面使用到這些字型了。

  7. Get Info string (键名:CFBundleGetInfoString)用於Mac的Finder上的應用程式的陈述。

  8. Icon already includes gloss effects(键名:UIPrerenderedIcon)钦定應用程式的圖示是不是丰盛光暈效果,如若不愿意增加光暈效果,那麼勾選此選項。

  9. Icon file(键名:CFBundleIconFile)用來設定應用程式的圖示檔,假若沒有钦定的話,則使用預設值Default.png,依照Apple的規定,這個圖是必須是57x57的圖形檔。

  10. Icon files(键名:CFBundleIconFiles)由於索尼爱立信與三星平板的開發工具以至SDK都以千篇风流倜傥律的,由此同生机勃勃個應用程式也得以同時在兩 個設備上利用,只不過兩著的圖是不太黄金时代樣。這個鍵值是生龙活虎個陣列類型的設定值,用來钦赐华为與苹果平板的應用程式圖示,你假设給兩個圖示檔名,此中金立的圖示為57x57 pixel,三星平板則為72x72 pixel,系統會自動依据圖示大小判斷該圖示是接收在哪種設備上。

  11. Info dictionary version(键名:CFBundleInfoDictionaryVersion)info.plist格式的本子。日常來說,作者們不會變動這個數值。

  12. Initial interface orientateon(键名:UIInterfaceOrientation)钦命應用程式开始時的趋势。

  13. Laumch image(键名:UILaunchImageFile)用以钦命應用程式啓動時的圖檔。

  14. Localization native development region(键名:CFBundleDevelopmentRegion)應用程式原始的語系版本。

  15. Localizations(键名:CFBundleLocalizations)用以内定應用程式所救助的語系。

  16. Localized resources can be mixed(键名:CFBundleAllowedMimxedLocalizations)是或不是允許應用程式能够赢得框架庫內的語系檔。

  17. Main nib file base name(键名:NSMainNibFile)主要的Nib檔案名稱,預設值為MainWindow。

  18. Renders with edge antialisasing(键名:UIViewEdgeAntialiasing)設定core animation的圖層是或不是開啓抗鋸齒功用。

  19. Renders with group opacity(键名:UIViewGroupOpacity)設定core animation的圖層使否繼承上风流倜傥層光滑度。

  20. Required background modes(键名:UIBackgroundModes)設定當應用程式進入背景執行後,哪些動作要繼續在背景執行。這個鍵值是风姿浪漫個陣列類型的設定,可設定動作包罗:audio,locateon,voip。

  21. Required device capabilities(键名:UIRequiredDeviceCapabilities)設定應用程式供给采纳到的硬體,如此能够確定應用程式在該設備上執行時不會發生錯誤。

  22. Status bar is initially hidden(键名:UIStatusBarHidden)設定狀態列是不是后生可畏開始隱藏。

  23. Status bar style(UIStatusBarStyle)設定狀態列的顯示類型。

  24. Supported external accessory protocols(键名:UISupportedExternalAccessoryProtocols)内定應用程式與外部硬體装配零件間支援的通訊協 定,這個鍵值是意气风发個陣列設定,能够钦赐多個通訊協定。

  25. Supported interface orientateons(键名:UISupportedInterfaceOrientations)設定應用程式所救助的顯示格局(肖像形式或風景方式卡塔尔国,這個鍵值是生机勃勃個陣列,能够援救多個不一样的顯示方式。

  26. Supported interface orientateons(键名:UIUpgradeOtherBundleIdentifier)設定應用程式所救助的顯示形式(肖像或是風景形式卡塔 尔(阿拉伯语:قطر‎,這個鍵值能够扶植多個分歧的顯示形式。

dependencies:(相依性項目,以空白間隔卡塔尔国

dependencies 是指定在建立 target 之前,必須先檢查的項目。可以不指定。例:
foo.o: common.h    gcc -c foo.c

上例中是指:檢查 common.h。如若它的确立日期比 foo.o 新,就執行 gcc -c foo.c 來重新產生 foo.o。也正是說,能够依须求建立 dependencies,即使它和 target 风华正茂點關係也沒有。

相依性項目能够是 Makefile 中其它的 target。也就此,在确立該 target 以前,它會先檢查在 dependencies 裡所内定的有所 target

Commands:(即為要執行的 Shell 指令卡塔尔国

必須以 <Tab> 開頭。使用 Shell Script 語法。在 Makefile 裡,只要以 <Tab> 開頭都將會被視為 Shell Script 執行。

每條法則必須寫在同一行。每條 Command 會啟動一個新的 Shell,預設為 /bin/sh。若執行完某條 Command 但傳回了錯誤值,make 就會中斷執行。
因為每條 Command 會啟動一個新的 Shell,所以有時執行的指令必須寫在同一行,像是使用 if 來進行條件判斷,此時可以用 ; 來分隔指令。例:
all:    if [ -f foo ]; then rm foo; fi

而以下是錯誤示範:

all:    cd subdir; $(MAKE)

這時因為 make 只會檢查最後意气风发個发令的傳回值,所以在以上命令中,纵然 subdir 不真实,但 make 並不會由在这之中斷執行,並會繼續執行 $(MAKE) 指令,而產生了不足預期的結果。

為了幸免這個問題,能够运用 && 來檢查此中某個指令是还是不是成功執行,再決定是或不是執行下個指令。例:

all:    cd subdir && $(MAKE)
特別字元:
@:不要顯示執行的指令。

-:表示即使該行指令出錯,也不會中斷執行。
例:
.PHONY: cleanclean:    @echo "Clean..."
    -rm *.o

因為 make 會风流罗曼蒂克行意气风发行將正在執行的 Commands 顯示在螢幕上,但你能够动用 @ 來暫時關閉這個效用。

而 make 只要碰着别的錯誤就會中斷執行。但疑似在進行 clean 時,也許根本沒有任何檔案能够 clean,由此 rm 會傳回錯誤值,因此導致 make 中斷執行。作者們能够采纳 - 來關閉錯誤中斷功效,讓 make 不會因在那之中斷。

隱性法則:

在上例中的:
foo.o: common.h    gcc -c foo.c

由於產生 foo.o 的通令正是 gcc -c foo.c,因而在 Makefile 裡能够將其簡化為:

foo.o: common.h

此時 make 會依據 target 的副檔名來猜測該怎么样編譯 target。如此可以讓 Makefile 更為簡潔。

您能够运用【空白指令】來幸免 make 依據隱性法則而進行編譯。例:

foo.o: common.h<Tab>

 

內部變數:

$?: 代表已被更新的 dependencies 的值。
也就是 dependencies 中,比 targets 還新的值。
[email protected]: 代表 targets 的值。
$<: 代表第一個 dependencies 的值。
$* : 代表 targets 所指定的檔案,但不包含副檔名。

例:

print: foo1.c foo2.c foo3.c    lpr -p $?    touch print

這樣會將 foo1.c foo2.c foo3.c 中原来就有纠正的內容印至印表機。

內部函數:

您可以在 Makefile 使用 make 所支援的一些內部函數。詳情請參考:

GNU `make': 8 Functions for Transforming Text

條件判斷:

可以在 Makefile 中使用以下的條件判斷語法。但由於它們不是 rule,所以不可以 <Tab> 開頭;但其後要執行的指令則必須以 <Tab>開頭,make 才會視其為 Shell 指令。

ifeq:(檢查 value1, value2 是否相等)
ifeq (value1, value2)    ...else    ...endif

ifneq:(提供和 ifeq 相反的效应卡塔 尔(英语:State of Qatar)

ifneq (value1, value2)    ...else    ...endif

ifdef:(檢查 variable 變數是或不是為空的卡塔尔国

ifdef variable
    ...
else
    ...
endif

ifndef:(提供和 ifdef 相反的功用卡塔 尔(阿拉伯语:قطر‎``

ifdef variable
    ...
else
    ....
endif

引入檔案:

將外部檔案引入 Makefile 中。可以視為直接在此將該檔案內容全數插入 Makefile 中。
例:
include foo.in

將 foo.in 的內容全數引进 Makefile 裡。

能够同時引进多個檔案、使用變數 $(MACRO)或然使用萬用字元(* ? 或 [...])。例:

include foo.in common*.in $(MAKEINCS)

子目錄:

如果該專案有多個目錄,且每一個目錄中都有 Makefile,則利用以下指令來進入子目錄並進行編譯:
cd dir && $(MAKE)

例:

SUBDIRS = dir1 dir2 dir3all:        for i in $(SUBDIRS); do                 (cd $$i && make);         doneclean:        for i in $(SUBDIRS); do                 (cd $$i && make clean);         doneinstall:        for i in $(SUBDIRS); do                 (cd $$i && make install);         done

make 參數:

可以用 make 的參數來蓋過 Makefile 裡,用變數所指定的參數。例:
make CFLAGS="-g -O2"

你能够在 Makefile 裡使用 override 來制止變數的值被 make 的參數所代表。例:

override CFLAGS = -Wall -g

能够在 make 後钦命要双重确立的 target。例:

make clean

上述會執行 Makefile 中的 clean 區段。

參考資訊:

GNU `make' 說明手冊(英文版)

心得:

我發現我每次寫筆記就會越寫越長、越寫越複雜、越寫越沒力。或許把力氣花在翻譯上面那個英文文件會是更好的選擇?

語法簡介,makefile 有稍微在 Linux 下碰過程式設計的開發者應該會知道, make 是用來將程式碼、函式庫、標頭檔及其它資源檔 build 成...

本文由贝博体育app发布于关于计算机,转载请注明出处:語法簡介,plist文件的设置含义

关键词:

上一篇:hdu_3123_GCC,
下一篇:属性监视器