CMakeCache.txt
可以將其想象成一個配置文件(在Unix環境下,我們可以認為它等價於傳遞給configure的參數)。
CMakeLists.txt 中通過 set(... CACHE ...) 設置的變量
CMakeLists.txt 中的 option() 提供的選項
CMakeLists.txt 中find_package() 等find命令引入變量
命令行 cmake . -D := 定義變量
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),他們將什么都不做。
另一方面,模塊查找時輸出的變量(_FOUND,_INCLUDE_DIRS,_LIBRARIES)不應該被cache