然後運行
cmake –version 查看一下你是否安裝完成
先介紹點常用的:
[code]project(TEST) //表明工程名稱,也可以指定工程支持的語言,默認情況下支持所有這個指令隱式的定義了兩個cmake變量:
_BINARY_DIR 和_SOURCE_DIR,在這裡就是TEST_BINARY_DIR和TEST_SOURCE_DIR ,在采用內部編譯時,這個兩個變量指的都是工程所在路徑。
同時系統也幫助我們預定義了PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR變量,他們的值分別跟TEST_BINARY_DIR TEST_SOURCE_DIR一致。為了統一,建議直接使用PROJECT_BINARY_DIR,因為即使改變工程名,也不會影響這兩個變量。
注意這個工程名TEST和可執行文件test時沒有關系的,可執行文件名可以隨意取。
[code]set (INC_DIR /usr/local/include) //頭文件路徑 set (LINK_DIR /usr/local/lib) //庫的路徑 set (SRC_LIST main.cpp ) //源文件名稱,源文件可以有多個,之間用空格隔開 set (LIB pthread Ice) //庫的名稱
使用${}來引用變量,但是有一個列外,在IF控制語句中,變量是直接使用變量名引用。
[code]include_directories(${INC_DIR}) //用${} 來引用變量
[code]link_directories(${LINK_DIR})
[code]add_ececutable( test ${SRC_LIST}) //生成一個執行文件test,源文件來自SRC_LIST的源文件列表
[code]target_link_libraries(test ${LIB}) //相當於是鏈接了-lphread -lIce
[code]message( SATUS "this is binary dir" ${TEST_BINARY_DIR}) //輸出工程所在目錄語法為message([SEND_ERROR| STATUS| FATAL_ERROR] “message”…)
SEND_ERROR,產生錯誤,生成過程被跳過
SATUS -,輸出前綴為“—”的信息。
FATAL_ERROR,立即終止所有的cmake過程
在src同級下建build目錄,進入到build目錄,
運行
[code]cmake ../src //../src代表工程目錄,主要是找到CMakeLists查看一下build目錄,就會發現生成了一些中間文件,
然後運行 make ,就會在build目錄下獲得目標文件test
注意: 上面我們提高過工程的兩個隱藏變量,TEST_SOURCE_DIR仍然指代工程目錄:src/ 。TEST_BINARY_DIR 則指代編譯目錄:/build/
[code]ADD_SUBDIRECTORY(src bin) //定義src子目錄加入工程,並指定編譯輸出路徑為bin目錄這個指令用於向當前工程添加存放源文件的子目錄,並可以指定中間二進制和目標二進制存放的位置。
以hello world 為例
建立Hello目錄,並建立子目錄
[code]Hello/src Hello/build在src目錄下建立main.c文件,一個簡單打印一句話
並在Hello目錄下建立CMakeLists.txt
[code]PROJECT(HELLO) ADD_SUBDIRECTORY(src bin)並在src目錄下也建立CMakeLists.txt,需要為任何子目錄建立一個CMakeLists.txt
[code]ADD_EXECUTABLE(hello main.c)然後進入到build目錄下:
[code]cmake .. make構建完成後,會發現生成的目標文件位於build/bin目錄中。
如果不進行bin目錄的指定,那麼編譯結構將存在build/src目錄中,指定bin目錄,相當於在編譯時,將src重命名為bin
[code]SET(EXECUTABLE_OUTPUT_PATH${PROJECT_BINARY_DIR}/bin) //可執行文件的輸出路徑為build/bin SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) //庫的輸出路徑為build/lib
PROJECT_BINARY_DIR在最開始我們已經說明過。
但是這些變量放在哪個CMakeLists.txt中呢?
一條原則:如果需要改變目標存放路徑,在哪裡ADD_EXECUTABLE或ADD_LIBRARY,就在哪裡添加上述定義。本例子中當然是src目錄下的txt
使用方法:
cmake -DCMAKE_INSTALL_PREFIX = /usr
INSTALL 指令用於定義安裝規則,安裝的內容可以包含目標二進制、動態庫、靜態庫以及文件、目錄、腳本等。
INSTALL包含了各種安裝類型
目標文件的安裝:
INSTALL( TARGETS targets…
[[ARCHIVE]|LIBRARY| RUNTIME]
[DESTINATION]
[PERMISSIONS permissions…]
[CONFIGURATIONS [Debug | Release| …]]
[COMPONENT]
[OPTIONAL]
)
參數類型 TARGETS後面就是我們定義的目標文件,如hello ,可能是可執行二進制、動態庫、靜態庫
目標類型有三種,ARCHIVE指靜態庫,LIBRARY特指動態庫,RUNTIME特指可執行目標二進制。
DESTINATION定義了安裝路徑,如果路徑是以/開頭,那麼指的是絕對路徑,這個時候,CMAKE_INSTALL_PREFIX其實就無效了,如果你希望使用CMAKE_INSTALL_PRFIX來定義安裝路徑,就要寫成相對路徑,不要以/開頭。
例子:
[code]INSTALL(TARGETS myrun mylib mystaticlib RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION libstatic )將可執行二進制myrun安裝到
${CMAKE_INSTALL_PREFIX}/bin目錄下 動態庫libmylib安裝到
${CMAKE_INSTALL_PREFIX}/lib普通文件安裝:
[code]INSTALL(FILES files... DESTINATION [PERMISSIONS permissions...] [CONFIGURATIONS [Debug | Release| ...]] [COMPONENT] )用於安裝一般文件,並可以指定訪問權限,文件名是此指令所在路徑下的相對路徑,如果默認不定義權限PERMISSIONS,安裝後的權限為(644)。