cmake 學習筆記(四)
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
接前面的一二三,學習一下 CMakeCache.txt 相關的東西。
CMakeCache.txt
可以將其想象成一個配置文件(在Unix環境下,我們可以認為它等價于傳遞給configure的參數)。
- CMakeLists.txt 中通過 set(... CACHE ...) 設置的變量
- CMakeLists.txt 中的 option() 提供的選項
- CMakeLists.txt 中find_package() 等find命令引入變量
-
命令行 cmake . -D <var>:<type>=<value> 定義變量
cmake 第一次運行時將生成 CMakeCache.txt 文件,我們可以通過ccmake或cmake-gui或make edit_cache對其進行編輯。
對應于命令行 -D 定義變量,-U 用來刪除變量(支持globbing_expr),比如 cmake -U/*QT/* 將刪除所有名字中帶有QT的cache項。
變量與Cache
cmake 的變量系統遠比第一眼看上去復雜:
- 有些變量被cache,有些則不被cache
- 被cache的變量
- 有的不能通過ccmake等進行編輯(internal)
- 有的(帶有描述和類型)可以被編輯(external)
- 有的只在ccmake的 advanced 模式出現
看個例子:
- SET(var1 13)
- 變量 var1 被設置成 13
- 如果 var1 在cache中已經存在,該命令不會overwrite cache中的值
- SET(var1 13 ... CACHE ...)
- 如果cache存在該變量,使用cache中變量
- 如果cache中不存在,將該值寫入cache
- SET(var1 13 ... CACHE ... FORCE)
- 不論cache中是否存在,始終使用該值
要習慣用幫助
cmake --help-command SET
find_xxx
為了避免每次運行都要進行頭文件和庫文件的探測,以及考慮到允許用戶通過ccmake設置頭文件路徑和庫文件的重要性,這些東西必須進行cache。
- find_path 和 find_library 會自動cache他們的變量,如果變量已經存在且是一個有效值(即不是 -NOTFOUND 或 undefined),他們將什么都不做。
-
另一方面,模塊查找時輸出的變量(<name>_FOUND,<name>_INCLUDE_DIRS,<name>_LIBRARIES)不應該被cache