亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在CMake中使用GLOB或每個文件單獨指定源文件是否更好?

在CMake中使用GLOB或每個文件單獨指定源文件是否更好?

莫回無 2019-07-26 11:43:17
在CMake中使用GLOB或每個文件單獨指定源文件是否更好?CMake提供了幾種指定目標源文件的方法。一種是使用globbing(文檔),例如:FILE (GLOB dir/*)另一個是單獨指定每個文件。哪種方式更喜歡?Globbing似乎很容易,但我聽說它有一些缺點。
查看完整描述

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這樣的東西來在同一個構建目錄中嘗試舊版本的代碼。在這種情況下,您可能需要清理和編譯超過必要的內容,以確保您在列表中獲得正確的文件。這是一個極端的案例,而且你已經在你的腳趾上,這不是一個真正的問題。


查看完整回答
反對 回復 2019-07-26
  • 3 回答
  • 0 關注
  • 7266 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號