Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

CMake 顯示產生器不相符?刪除快取前先證明建置樹歸屬

固定失敗的來源/建置目錄組合,讀取快取產生器與前端設定;隔離設定、原生建置與測試通過後,才處理舊樹。

原創示意圖:連結 CMake 來源樹、建置樹、快取產生器與命令列、環境、preset、kit 或 IDE 歸屬。
原創示意圖:連結 CMake 來源樹、建置樹、快取產生器與命令列、環境、preset、kit 或 IDE 歸屬。 Watch at Ease

CMake 的產生器不相符代表現有建置樹記住了與目前設定請求不同的產生器。這是建置樹身分衝突,不是重新命名或刪除 CMakeLists.txt 的理由。

先保留命令與快取,確認命令列、環境、preset、kit 或 IDE 誰選了新產生器;記錄必須重現的設定後,再建立獨立建置樹或審慎使用 --fresh。

固定衝突的來源與建置目錄

保存完整命令、工作目錄、環境、preset 與 IDE 紀錄,分別解析來源和建置目錄;不要修改 CMakeLists.txt 來處理快取身分衝突。

複製或雜湊 CMakeCache.txt,記錄 GENERATOR、PLATFORM、TOOLSET、HOME_DIRECTORY、編譯器與刻意設定的 -D 值。

找出產生器的實際擁有者

比較顯式 -G、CMAKE_GENERATOR、作用中的 configure preset、kit、CMake Tools 設定、toolset 與 platform;只讓一個權威決定目標設定。

舊樹若來自另一機器、容器、checkout 或 IDE 版本,應視為證據而非預設重用;不同產生器的原生檔案不能混合。

選擇可逆的復原邊界

優先用 -S、-B 和目標產生器建立新建置目錄,只恢復已審閱的快取選項,保留舊樹作比較與回復。

只有無法建立新樹且已保存設定時,才用 --fresh 或刪除 CMakeCache.txt/CMakeFiles。--fresh 需要 CMake 3.24 以上;不可刪除來源樹。

證明設定、建置與測試

保存成功設定紀錄,確認新快取的來源樹、產生器、platform、toolset 與編譯器,再用 cmake --build 呼叫相符的原生工具。

執行測試並檢查 binary、library、package 或 compile database;與舊快取比較關鍵選項,設定成功碼本身不足以驗收。

有意識地退役污染樹

替代樹通過後才封存或移除舊建置樹,並統一 CI、preset 和 IDE 的來源/建置邊界與產生器權威。

不改輸入再設定一次;必須保留同一產生器且沒有無法解釋的完整重建,並保存歸屬紀錄。

原創示意圖:保存舊快取、隔離設定新樹,驗證建置與測試後才退役舊樹。
原創示意圖:保存舊快取、隔離設定新樹,驗證建置與測試後才退役舊樹。 Watch at Ease