CMake 手册详解(五)
CMake 手冊(cè)詳解(五)
CMD#2: add_custom_target?添加一個(gè)目標(biāo),它沒(méi)有輸出;這樣它就總是會(huì)被構(gòu)建。
add_custom_target(Name [ALL] [command1 [args1...]] [COMMAND command2 [args2...] ...] [DEPENDS depend depend depend ... ] [WORKING_DIRECTORY dir] [COMMENT comment] [VERBATIM] [SOURCES src1 [src2...]])用Name選項(xiàng)給定的名字添加一個(gè)目標(biāo),這個(gè)目標(biāo)會(huì)引發(fā)給定的那些命令。這個(gè)目標(biāo)沒(méi)有輸出文件,并且總是被認(rèn)為是過(guò)時(shí)的,即使那些命令試圖去創(chuàng)建一個(gè)與該目標(biāo)同名的文件。使用ADD_CUSTOM_COMMAND命令可以生成一個(gè)帶有依賴性的文件。默認(rèn)情況下,沒(méi)有目標(biāo)會(huì)依賴于自定義目標(biāo)。使用ADD_DEPENDENCIES命令可以添加依賴于該目標(biāo)或者被該目標(biāo)依賴的目標(biāo)。如果指定了ALL選項(xiàng),這表明這個(gè)目標(biāo)應(yīng)該被添加到默認(rèn)的構(gòu)建目標(biāo)中,這樣它每次都會(huì)被構(gòu)建(命令的名字不能是ALL)。命令和選項(xiàng)是可選的;如果它們沒(méi)有被指定,將會(huì)產(chǎn)生一個(gè)空目標(biāo)。如果設(shè)定了WORKING_DIRECTORY參數(shù),該命令會(huì)在它指定的路徑下執(zhí)行。如果指定了COMMENT選項(xiàng),后跟的參數(shù)將會(huì)在構(gòu)件的時(shí)候,在命令執(zhí)行之前,被顯示出來(lái)。DEPENDS選項(xiàng)后面列出來(lái)的依賴目標(biāo)可以引用add_custom_command命令在相同路徑下(CMakeLists.txt)生成的輸出和文件。
如果指定了VERBATIM選項(xiàng),所有傳遞到該命令的選項(xiàng)將會(huì)被合適地轉(zhuǎn)義;這樣,該命令調(diào)用的構(gòu)建工具會(huì)接收到未經(jīng)改變的參數(shù)。注意,CMake語(yǔ)言處理器會(huì)在add_custom_target命令在看到這些參數(shù)之前對(duì)它們進(jìn)行一層轉(zhuǎn)義。推薦使用該參數(shù),因?yàn)樗WC了正確的行為。當(dāng)未指定該參數(shù)時(shí),轉(zhuǎn)義的行為依賴于平臺(tái),因?yàn)镃Make沒(méi)有針對(duì)于特定工具中特殊字符的保護(hù)措施。
SOURCES選項(xiàng)指定了會(huì)被包含到自定義目標(biāo)中的附加的源文件。指定的源文件將會(huì)被添加到IDE的工程文件中,方便在沒(méi)有構(gòu)建規(guī)則的情況下能夠編輯。
CMD#3:add_definitions?為源文件的編譯添加由-D引入的define flag。
add_definitions(-DFOO -DBAR ...)在編譯器的命令行上,為當(dāng)前路徑以及下層路徑的源文件加入一些define flag。這個(gè)命令可以用來(lái)引入任何flag,但是它的原意是用來(lái)引入預(yù)處理器的定義。那些以-D或/D開(kāi)頭的、看起來(lái)像預(yù)處理器定義的flag,會(huì)被自動(dòng)加到當(dāng)前路徑的COMPILE_DEFINITIONS屬性中。為了后向兼容,非簡(jiǎn)單值(non-trival,指的是什么?——譯注)的定義會(huì)被留在flags組(flags set)里,而不會(huì)被轉(zhuǎn)換。關(guān)于在特定的域以及配置中增加預(yù)處理器的定義,參考路徑、目標(biāo)以及源文件的COMPILE_DEFINITIONS屬性來(lái)獲取更多的細(xì)節(jié)。
CMD#4:add_dependencies?為頂層目標(biāo)引入一個(gè)依賴關(guān)系。
add_dependencies(target-name depend-target1 depend-target2 ...)讓一個(gè)頂層目標(biāo)依賴于其他的頂層目標(biāo)。一個(gè)頂層目標(biāo)是由命令A(yù)DD_EXECUTABLE,ADD_LIBRARY,或者ADD_CUSTOM_TARGET產(chǎn)生的目標(biāo)。為這些命令的輸出引入依賴性可以保證某個(gè)目標(biāo)在其他的目標(biāo)之前被構(gòu)建。查看ADD_CUSTOM_TARGET和ADD_CUSTOM_COMMAND命令的DEPENDS選項(xiàng),可以了解如何根據(jù)自定義規(guī)則引入文件級(jí)的依賴性。查看SET_SOURCE_FILES_PROPERTIES命令的OBJECT_DEPENDS選項(xiàng),可以了解如何為目標(biāo)文件引入文件級(jí)的依賴性。
CMD#5:add_executable: 使用給定的源文件,為工程引入一個(gè)可執(zhí)行文件。
add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)引入一個(gè)名為<name>的可執(zhí)行目標(biāo),該目標(biāo)會(huì)由調(diào)用該命令時(shí)在源文件列表中指定的源文件來(lái)構(gòu)建。<name>對(duì)應(yīng)于邏輯目標(biāo)名字,并且在工程范圍內(nèi)必須是全局唯一的。被構(gòu)建的可執(zhí)行目標(biāo)的實(shí)際文件名將根據(jù)具體的本地平臺(tái)創(chuàng)建出來(lái)(比如<name>.exe或者僅僅是<name>)。
默認(rèn)情況下,可執(zhí)行文件將會(huì)在構(gòu)建樹(shù)的路徑下被創(chuàng)建,對(duì)應(yīng)于該命令被調(diào)用的源文件樹(shù)的路徑。如果要改變這個(gè)位置,查看RUNTIME_OUTPUT_DIRECTORY目標(biāo)屬性的相關(guān)文檔。如果要改變最終文件名的<name>部分,查看OUTPUT_NAME目標(biāo)屬性的相關(guān)文檔。
如果指定了MACOSX_BUNDLE選項(xiàng),對(duì)應(yīng)的屬性會(huì)附加在創(chuàng)建的目標(biāo)上。查看MACOSX_BUNDLE目標(biāo)屬性的文檔可以找到更多的細(xì)節(jié)。
如果指定了EXCLUDE_FROM_ALL選項(xiàng),對(duì)應(yīng)的屬性將會(huì)設(shè)置在被創(chuàng)建的目標(biāo)上。查看EXCLUDE_FROM_ALL目標(biāo)屬性的文檔可以找到更多的細(xì)節(jié)。
使用下述格式,add_executable命令也可以用來(lái)創(chuàng)建導(dǎo)入的(IMPORTED)可執(zhí)行目標(biāo):
add_executable(<name> IMPORTED)
? 一個(gè)導(dǎo)入的可執(zhí)行目標(biāo)引用了一個(gè)位于工程之外的可執(zhí)行文件。該格式不會(huì)生成構(gòu)建這個(gè)目標(biāo)的規(guī)則。該目標(biāo)名字的作用域在它被創(chuàng)建的路徑以及底層路徑有效。它可以像在該工程內(nèi)的其他任意目標(biāo)一樣被引用。導(dǎo)入可執(zhí)行文件為類似于add_custom_command之類的命令引用它提供了便利。
關(guān)于導(dǎo)入的可執(zhí)行文件的細(xì)節(jié)可以通過(guò)設(shè)置以IMPORTED_開(kāi)頭的屬性來(lái)指定。這類屬性中最重要的是IMPORTED_LOCATION(以及它對(duì)應(yīng)于具體配置的版本IMPORTED_LOCATION_<CONFIG>);該屬性指定了執(zhí)行文件主文件在磁盤上的位置。查看IMPORTED_*屬性的文檔來(lái)獲得更多信息。
總結(jié)
以上是生活随笔為你收集整理的CMake 手册详解(五)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cmake学习(五) 系统默认变量和内置
- 下一篇: CMake 用法导览