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