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