CMake學習筆記

由於在Linux下寫程序的話,需要用到很多庫,如果工程較大的話,編譯命令可能會很長,將編譯的工作交給CMake是一個比較好的選擇。

我在Linux下用CLion這個IDE,它用到的是CMake管理項目的編譯工作。這些筆記是我看網上別人的筆記的時候記下來的。網上那篇筆記《CMake Practice》寫得不錯。

cmake語法

變量名大小寫相關,文件名大小寫也相關,指令大小寫無關。指令和變量推薦使用大寫。

例如:

set(src_list main.c) != set(SRC_LIST main.c)
set(src_list main.c) != set(src_list MAIN.C)
set(src_list main.c) == SET(src_list main.c)

一些常用的變量

EXECTABLE_OUTPUT_PATH: 這個變量是指定編譯出來的可執行文件的輸出路徑

LIBRARY_OUTPUT_PATH: 這個變量指定編譯出來的庫文件的輸出路徑

< porjectname>_BINARY_DIR: 編譯所在目錄

< porjectname>_SOURCE_DIR: 源代碼所在目錄

一些常用的指令

INCLUDE_DIRECTORIES(dir1 dir2 …):頭文件的搜索路徑

LINK_DIRECTORIES(dir1 dir2 …):添加非標準的共享庫搜索路徑

TARGET_LINK_LIBRARIES(target library1 …):這個指令可以用來爲 target 添加需要鏈接的共享庫

用這三個指令就可以實現包含頭文件,包含動態鏈接庫的功能,但是這樣需要將路徑指定,一旦換了環境,很可能需要很多更改。那麼我們可以用下面這些更高級的指令來完成我們需要的任務。
FIND_PATH():

export CMAKE_INCLUDE_PATH=/usr/include/hello
FIND_PATH(myHeader hello.h)
IF(myHeader)
INCLUDE_DIRECTORIES(${myHeader})
ENDIF(myHeader)
這裏我們沒有指定路徑,但是,cmake 仍然可以幫我們找到 hello.h 存放的路徑,就是因爲我們設置了環境變量 CMAKE_INCLUDE_PATH。

我們還可以在FIND_PATH()裏面制定搜索路徑:

FIND_PATH(myHeader NAMES hello.h PATHS /usr/include /usr/include/hello)

FIND_LIBRARY():用法同FIND_PATH(),找到後用LINK_DIRECTORIES()

cmake變量

  1. cmake變量引用的方式:

    前面我們已經提到了,使用${}進行變量的引用。在IF等語句中,是直接使用變量名而不通過${}取值

  2. cmake自定義變量:

    主要有隱式定義和顯式定義兩種

    • PROJECT 指令,他 會隱式的定義< projectname>_BINARY_DIR 和< projectname>_SOURCE_DIR 兩個變 量。
    • 使用 SET 指令

編寫FIND_PACKAGE()

用來調用預定義在 CMAKE_MODULE_PATH 下的 Find< name>.cmake 模塊,你也可以自己 定義Find< name>模塊,這樣可以使每個CMakeLists.txt更短小,更易讀。
FIND_PACKAGE()區分參數的大小寫。

FIND_PACKAGE(MySQL) != FIND_PACKAGE(mysql)
發佈了46 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章