CMake用法筆記

來源:互聯網
上載者:User

最近在學習Mysql的原始碼,用到了CMake做為Build工具。

通過CMake去掃描系統的一些配置,會產生config.h檔案,這個標頭檔裡包含了一系列的以HAVE_為首碼的宏。

在原始碼根目錄下的config.h.cmake  是模板檔案,包含了所有的掃描項。

在Mysql的影子編譯目錄裡面(我一般都是用影子編譯,保持原始碼目錄的純潔性),我們可以找到config.h,CMake指令碼會把config.h拷貝成另外一個內容完全一模一樣的my_config.h檔案。

我們現在以 HAVE_NPTL 這個宏使用在Mysql原始碼中的這種情況為例學習CMake的原理:

我們瀏覽Mysql目錄的CMake目錄,這個是Mysql專有的CMake指令碼,我們通過尋找,在cmake\os\linux.cmake中找到了 HAVE_NPTL的定義。

在這個檔案裡HAVE_NPTL是固定設為1的,我們繼續學習非固定設定的情況。

比如  CHECK_SYMBOL_EXISTS(SHM_HUGETLB sys/shm.h  HAVE_DECL_SHM_HUGETLB)

該CMake檔案的包含了 INCLUDE(CheckSymbolExists)

CheckSymbolExists 是CMake的公用模組,我的機器上位於/usr/share/cmake-2.8/Modules目錄下。

我們繼續研究該檔案:

閱讀了其原始碼後,MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)

這個宏的作用就是,尋找相關檔案(FILES)裡面是否包含相關符號(SYMBOL) 如果存在則設定VARIABLE 為1,MESSAGE宏會在螢幕上做相關列印。

上面的列子中就是在 sys/shm.h 檔案裡面尋找SHM_HUGETLB 符號。

我們查看  /usr/include/shm.h

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.