




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
編輯CMakeList文件CMakeLists文件幾乎可以在任何文本編輯器中進(jìn)行編輯。一些編輯器,如記事本++,帶有CMake語法突出顯示和內(nèi)置縮進(jìn)支持。對于像Emacs或Vim這樣的編輯器,CMake包括縮進(jìn)和語法突出顯示模式。這些可以找到在源發(fā)行版的目錄中,或從CMake下載頁面。Auxiliary在任何受支持的生成器(Makefiles、VisualStudio等)中,如果您編輯CMakeLists文件并重建,有些規(guī)則會自動調(diào)用CMake以更新生成的文件(例如生成文件或項目文件),根據(jù)需要。這有助于確保您生成的文件是始終與您的CMakeList文件同步。清宗語言CMake語言由注釋、命令和變量組成。評論注釋從行尾開始并一直運(yùn)行到行尾。有關(guān)更多詳細(xì)信息,請參閱手冊。#變量CMakeLists文件使用變量與任何編程語言非常相似。清明變量名稱區(qū)分大小寫,只能包含字母數(shù)字字符和下劃線。許多有用的變量由CMake自動定義,它們是手冊中討論過。這些變量以開頭。避免此命名約定(并且,理想情況下,建立自己的)用于特定于項目的變量。CMAKE_所有CMake變量在內(nèi)部存儲為字符串,盡管它們可能有時被解釋為其他類型的。使用該命令設(shè)置變量值。在最簡單的形式中,第一個參數(shù)是變量的名稱和其余參數(shù)是值。打包了多個值參數(shù)到以分號分隔的列表中并存儲在變量作為字符串。例如:set(Foo"")#1quotedarg->valueis""set(Fooa)#1unquotedarg->valueis"a"set(Foo"abc")#1quotedarg->valueis"abc"set(Fooabc)#3unquotedargs->valueis"a;b;c"可以使用語法在命令參數(shù)中引用變量,其中是變量名稱。如果命名變量未定義,引用將替換為空字符串;否則,它將替換為變量的值。更換是在擴(kuò)展未帶引號的參數(shù)之前執(zhí)行,因此可變包含分號的值被拆分為零個或多個參數(shù)原始未引用論點(diǎn)的位置。例如:${VAR}VARset(Fooabc)#3unquotedargs->valueis"a;b;c"command(${Foo})#unquotedargreplacedbya;b;c#andexpandstothreeargumentscommand("${Foo}")#quotedargvalueis"a;b;c"set(Foo"")#1quotedarg->valueisemptystringcommand(${Foo})#unquotedargreplacedbyemptystring#andexpandstozeroargumentscommand("${Foo}")#quotedargvalueisemptystring系統(tǒng)環(huán)境變量和Windows注冊表值可以是直接在CMake中訪問。要訪問系統(tǒng)環(huán)境變量,使用語法。CMake還可以引用注冊表許多命令中的條目使用形式的語法,其中路徑從注冊表樹和注冊表項生成。$ENV{VAR}[HKEY_CURRENT_USER\Software\path1\path2;key]可變范圍CMake中的變量的作用域與大多數(shù)變量略有不同語言。設(shè)置變量時,該變量對當(dāng)前可見CMakeLists文件或函數(shù)以及任何子目錄的CMakeLists文件,調(diào)用的任何函數(shù)或宏,以及包含使用命令。當(dāng)新的子目錄被處理(或調(diào)用函數(shù)),創(chuàng)建一個新的變量范圍,并且使用調(diào)用中所有變量的當(dāng)前值初始化范圍。在子作用域中創(chuàng)建的任何新變量或所做的更改對現(xiàn)有變量,不會影響父范圍。考慮以下示例:function(foo)message(${test})#testis1hereset(test2)message(${test})#testis2here,butonlyinthisscopeendfunction()set(test1)foo()message(${test})#testwillstillbe1here在某些情況下,您可能希望函數(shù)或子目錄設(shè)置變量在其父級的作用域中。有一種方法可以讓CMake返回一個值,可以通過使用帶有命令的選項來完成。我們可以修改前面的示例,以便函數(shù)更改測試的值在其父級的范圍內(nèi),如下所示:PARENT_SCOPEfoofunction(foo)message(${test})#testis1hereset(test2PARENT_SCOPE)message(${test})#teststill1inthisscopeendfunction()set(test1)foo()message(${test})#testwillnowbe2hereCMake中的變量按命令執(zhí)行的順序定義。請考慮以下示例:#FOOisundefinedset(FOO1)#FOOisnowsetto1set(FOO0)#FOOisnowsetto0要了解變量的范圍,請考慮以下示例:set(foo1)#processthedir1subdirectoryadd_subdirectory(dir1)#includeandprocessthecommandsinfile1.cmakeinclude(file1.cmake)set(bar2)#processthedir2subdirectoryadd_subdirectory(dir2)#includeandprocessthecommandsinfile2.cmakeinclude(file2.cmake)在此示例中,由于變量是在首先,它將在處理DIR1和DIR2時定義。在相反,僅在處理DIR2時定義。同樣,將在處理file1.cmake和file2.cmake,而只會在處理時定義文件2.cmake.foobarfoobar命令命令由命令名稱、左括號、空格組成分隔的參數(shù)和右括號。每個命令在它在CMakeLists文件中的顯示順序。有關(guān)完整列表,請參閱手冊CMake命令。CMake不再區(qū)分大小寫,因此在你看到的地方,你可以使用or代替。它被認(rèn)為是使用小寫命令的最佳做法。所有空格(空格、換行符、制表符)被忽略,但分隔參數(shù)除外。因此,命令可能跨越多行,只要命令名稱和左括號在同一行。commandCOMMANDCommandCMake命令參數(shù)以空格分隔且區(qū)分大小寫。命令參數(shù)可以是引用的,也可以是未引用的。引用的參數(shù)開始和結(jié)束在雙引號(“)中,并且始終只表示一個參數(shù)。任意雙倍值中包含的引號必須使用反斜杠進(jìn)行轉(zhuǎn)義。考慮對需要轉(zhuǎn)義的參數(shù)使用括號參數(shù),請參閱手冊。一個沒有引用的論點(diǎn)以雙引號以外的任何字符開頭(后面的雙引號是文字),并通過以下方式自動擴(kuò)展為零個或多個參數(shù)在值內(nèi)的分號上分隔。例如:command("")#1quotedargumentcommand("abc")#1quotedargumentcommand("a;b;c")#1quotedargumentcommand("a""b""c")#3quotedargumentscommand(abc)#3unquotedargumentscommand(a;b;c)#1unquotedargumentexpandsto3基本命令正如我們之前看到的,和命令顯式設(shè)置或取消設(shè)置變量。、和命令提供字符串和列表的基本操作。和命令是主要的用于定義要構(gòu)建的可執(zhí)行文件和庫的命令,以及哪些源文件組成它們。對于VisualStudio項目,源文件將照常顯示在IDE中,但任何頭文件都顯示在項目使用不會。要顯示頭文件,只需將它們添加到可執(zhí)行文件或庫的源文件列表中;這可以為所有發(fā)電機(jī)完成。任何不使用的生成器頭文件直接(例如基于Makefile的生成器)將干脆忽略它們。流控制CMake語言提供了三種流控制結(jié)構(gòu)來幫助組織您的CMakeList文件并保持它們可維護(hù)。條件語句(例如)循環(huán)構(gòu)造(例如和)程序定義(例如)條件語句首先,我們將考慮該命令。在許多方面,CMake中的命令就像任何其他語言。它計算其表達(dá)式并使用它來執(zhí)行代碼在其正文中或子句中的代碼(可選)。為例:if(FOO)#dosomethinghereelse()#dosomethingelseendif()CMake還支持幫助順序測試多個條件。例如:if(MSVC80)#dosomethinghereelseif(MSVC90)#dosomethingelseelseif(APPLE)#dosomethingelseendif()該命令記錄了它可以測試的許多條件。循環(huán)構(gòu)造和命令允許您處理按順序發(fā)生的重復(fù)性任務(wù)。命令中斷在正常情況下脫離OR循環(huán)結(jié)束。該命令使您能夠執(zhí)行組的CMake命令在列表成員上重復(fù)執(zhí)行??紤]以下示例改編自VTKforeach(tfileTestAnisotropicDiffusion2DTestButterworthLowPassTestButterworthHighPassTestCityBlockDistanceTestConvolve)add_test(${tfile}-image${VTK_EXECUTABLE}${VTK_SOURCE_DIR}/Tests/rtImageTest.tcl${VTK_SOURCE_DIR}/Tests/${tfile}.tcl-D${VTK_DATA_ROOT}-VBaseline/Imaging/${tfile}.png-A${VTK_SOURCE_DIR}/Wrapping/Tcl)endforeach()命令的第一個參數(shù)是變量,每次迭代時將采用不同的值循環(huán);其余參數(shù)是要在其上執(zhí)行的值列表圈。在此示例中,循環(huán)的主體只是一個CMake命令,.在的正文中,每個引用循環(huán)變量(在本例中)的時間將替換為列表中的當(dāng)前值。在第一個迭代,出現(xiàn)的將替換為。在下一次迭代中,將替換為。循環(huán)將繼續(xù)循環(huán),直到處理完所有參數(shù)。tfile${tfile}TestAnisotropicDiffusion2D${tfile}TestButterworthLowPass值得一提的是,循環(huán)可以嵌套,并且循環(huán)變量在任何其他變量之前被替換擴(kuò)張。這意味著在循環(huán)的主體中,您可以使用循環(huán)變量構(gòu)造變量名稱。在下面的代碼中,循環(huán)變量展開,然后與連接。然后擴(kuò)展并測試新變量名稱看看它是否匹配.tfile_TEST_RESULTFAILEDif(${${tfile}_TEST_RESULT}MATCHESFAILED)message("Test${tfile}failed.")endif()該命令根據(jù)測試條件提供循環(huán)。這命令中測試表達(dá)式的格式與它適用于命令,如前所述。考慮以下示例,由CTest使用。請注意,CTest在內(nèi)部更新的值。CTEST_ELAPSED_TIME######################################################runparaviewandctesttestdashboardsfor6hours#while(${CTEST_ELAPSED_TIME}LESS36000)set(START_TIME${CTEST_ELAPSED_TIME})ctest_run_script("dash1_ParaView_vs71continuous.cmake")ctest_run_script("dash1_cmake_vs71continuous.cmake")endwhile()過程定義和命令支持重復(fù)性任務(wù)可能分散在您的CMakeLists文件中。一旦宏或函數(shù)被定義,它可以被任何CMakeList文件使用后處理它的定義。CMake中的函數(shù)非常類似于C或C++中的函數(shù)。您可以將參數(shù)傳遞到其中,它們成為功能。同樣,一些標(biāo)準(zhǔn)變量,如、、、和、等。是定義。函數(shù)調(diào)用具有動態(tài)作用域。在一個函數(shù)中,你在新的變量范圍內(nèi);這就像你如何掉進(jìn)一個使用該命令的子目錄,并且位于新的變量范圍。函數(shù)時定義的所有變量被稱為保持定義,但對變量的任何更改或新的變量僅存在于函數(shù)中。當(dāng)函數(shù)返回時,這些變量將消失。更簡單地說:當(dāng)你調(diào)用函數(shù),推送一個新的變量范圍;當(dāng)它返回時,彈出變量范圍。ARGCARGVARGNARGV0ARGV1該命令定義一個新函數(shù)。第一個參數(shù)是要定義的函數(shù)的名稱;所有其他參數(shù)均為函數(shù)的形式參數(shù)。function(DetermineTime_time)#passtheresultuptowhateverinvokedthisset(${_time}"1:23:45"PARENT_SCOPE)endfunction()#nowusethefunctionwejustdefinedDetermineTime(current_time)if(DEFINEDcurrent_time)message(STATUS"Thetimeisnow:${current_time}")endif()請注意,在此示例中,用于傳遞返回變量。調(diào)用該命令時,其值為,該值為。最后,該命令使用該選項在調(diào)用方的作用域,而不是本地作用域。_time_timecurrent_timePARENT_SCOPE宏的定義和調(diào)用方式與函數(shù)相同。這主要區(qū)別在于宏不會推送和彈出新變量范圍,并且宏的參數(shù)不被視為變量而是在執(zhí)行之前替換字符串。這很像宏與C或C++中的函數(shù)之間的差異。第一個參數(shù)是要創(chuàng)建的宏的名稱;所有其他參數(shù)是宏的形式參數(shù)。#defineasimplemacromacro(assertTESTCOMMENT)if(NOT${TEST})message("Assertionfailed:${COMMENT}")endif()endmacro()#usethemacrofind_library(FOO_LIBfoo/usr/local/lib)assert(${FOO_LIB}"Unabletofindlibraryfoo")上面的簡單示例創(chuàng)建了一個名為的宏。宏定義為兩個參數(shù);第一個是要測試的值和第二個是如果測試失敗,要打印出的注釋。身體的宏是帶有命令的簡單命令里面。當(dāng)命令為發(fā)現(xiàn)。只需使用宏的名稱即可調(diào)用宏,就好像它是命令。在上面的例子中,如果未找到,則將顯示消息,指示錯誤條件。assertFOO_LIB該命令還支持定義采用變量的宏參數(shù)列表。如果要定義一個宏,這會很有用具有可選參數(shù)或多個簽名。變量參數(shù)可以改為使用and、、等進(jìn)行引用的形式參數(shù)。表示第一個參數(shù)宏;表示下一個,依此類推。你也可以混合使用正式參數(shù)和變量參數(shù),如下面的示例。ARGCARGV0ARGV1ARGV0ARGV1#defineamacrothattakesatleasttwoarguments#(theformalarguments)plusanoptionalthirdargumentmacro(assertTESTCOMMENT)if(NOT${TEST})message("Assertionfailed:${COMMENT}")#ifcalledwiththreeargumentsthenalsowritethe#messagetoafilespecifiedasthethirdargumentif(${ARGC}MATCHES3)file(APPEND${ARGV2}"Assertionfailed:${COMMENT}")endif()endif()endmacro()#usethemacrofind_library(FOO_LIBfoo/usr/local/lib)assert(${FOO_LIB}"Unabletofindlibraryfoo")在此示例中,兩個必需的參數(shù)是和。這些必需的參數(shù)可以按名稱引用,如它們在本例中,或
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高新技術(shù)產(chǎn)業(yè)項目擔(dān)保合同投標(biāo)委托保證協(xié)議書
- 2025-2030年音響行業(yè)市場調(diào)研及前景趨勢預(yù)測報告
- 熱處理項目投資立項報告
- 2024年足球行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報告
- 【風(fēng)險管理】風(fēng)險監(jiān)測報告與風(fēng)險水平評價(演示稿)
- 2025年關(guān)于增加人員編制的請示報告
- 2025年度自動化車間租賃及升級合同范本
- 2025年度智慧醫(yī)療建設(shè)項目承包經(jīng)營協(xié)議
- 中國瓶裝水飲用水項目投資可行性研究報告
- 2025年智慧城市項目協(xié)議供貨商合同范本
- GB/T 14335-2008化學(xué)纖維短纖維線密度試驗方法
- 10000中國普通人名大全
- 18-《護(hù)理心理學(xué)》課程標(biāo)準(zhǔn)
- 大國崛起專題課件
- 高考英語單詞3500分類記憶(精編版)
- 非公開發(fā)行公司債券的法律意見書模版
- 企業(yè)管理概論-課件全書課件完整版ppt全套教學(xué)教程最全電子教案電子講義(最新)
- 餐飲服務(wù)食品安全監(jiān)督量化分級動態(tài)等級評定檢查表
- 北師大版語文選修《蕭蕭》ppt課件1
- 《談骨氣》課文閱讀(共2頁)
評論
0/150
提交評論