3 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
完全披露:我最初傾向于簡(jiǎn)化泛化方法,但多年來我逐漸認(rèn)識(shí)到明確列出文件對(duì)于大型多開發(fā)人員項(xiàng)目來說不易出錯(cuò)。
原始答案:
通配的優(yōu)點(diǎn)是:
添加新文件很容易,因?yàn)樗鼈冎涣性谝粋€(gè)地方:磁盤上。不是globbing會(huì)創(chuàng)建重復(fù)。
您的CMakeLists.txt文件將更短。如果你有很多文件,這是一個(gè)很大的優(yōu)勢(shì)。不是globbing會(huì)導(dǎo)致您丟失巨大的文件列表中的CMake邏輯。
使用硬編碼文件列表的優(yōu)點(diǎn)是:
CMake將正確跟蹤磁盤上新文件的依賴關(guān)系 - 如果我們使用glob,那么當(dāng)你運(yùn)行時(shí),第一次沒有全局文件的文件將無法獲取
您確保只添加所需的文件。Globbing可能會(huì)拾取您不想要的雜散文件。
為了解決第一個(gè)問題,您可以通過使用touch命令或通過編寫沒有更改的文件來“觸摸”執(zhí)行g(shù)lob的CMakeLists.txt。這將迫使cmake重新運(yùn)行并獲取新文件。
要解決第二個(gè)問題,您可以將代碼小心地組織到目錄中,這也是您可能要做的事情。在最壞的情況下,您可以使用list(REMOVE_ITEM)命令來清理全局文件列表:
file(GLOB to_remove file_to_remove.cpp)list(REMOVE_ITEM list ${to_remove})
唯一可以咬你的真實(shí)情況是,如果你使用像git-bisect這樣的東西來在同一個(gè)構(gòu)建目錄中嘗試舊版本的代碼。在這種情況下,您可能需要清理和編譯超過必要的內(nèi)容,以確保您在列表中獲得正確的文件。這是一個(gè)極端的案例,而且你已經(jīng)在你的腳趾上,這不是一個(gè)真正的問題。
添加回答
舉報(bào)