cmake 簡介
CMake是一個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的C++特性,類似UNIX下的automake。 CMake 使用方法
CMake的所有的語句都寫在一個叫:CMakeLists.txt的檔案中。當CMakeLists.txt檔案確定後,可以用ccmake命令對相關 的變數值進行配置。這個命令必須指向CMakeLists.txt所在的目錄。配置完成之後,應用cmake命令產生相應的makefile(在Unix like系統下)或者 project檔案(指定用window下的相應編程工具編譯時間)。
其基本操作流程為:
$> ccmake directory$> cmake directory$> make
其中directory為CMakeList.txt所在目錄; 第一條語句用於配置編譯選項,如VTK_DIR目錄 ,一般這一步不需要配置,直接執行第二條語句即可,但當出現錯誤時,這裡就需要認為配置了,這一步才真正派上用場; 第二條命令用於根據CMakeLists.txt產生Makefile檔案; 第三條命令用於執行Makefile檔案,編譯器,產生可執行檔;
CMake的執行就是這麼簡單,其痛點在於如何編寫CMakeLists.txt檔案,下面結合例子簡單介紹CMakeLists.txt的編寫,看下面這個CMakeLists.txt
#project namePROJECT(test_math)#head file pathINCLUDE_DIRECTORIES(include)#source directoryAUX_SOURCE_DIRECTORY(src DIR_SRCS)#set environment variableSET(TEST_MATH${DIR_SRCS})#set extern librariesSET(LIBRARIESlibm.so)#add executable fileADD_EXECUTABLE(../bin/bin ${TEST_MATH})#add link libraryTARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})
或者用下面這個CMakeLists.txt
#project namePROJECT(test_math)#head file pathINCLUDE_DIRECTORIES(include)#source directoryAUX_SOURCE_DIRECTORY(src DIR_SRCS)#set environment variableSET(TEST_MATH${DIR_SRCS})#add executable fileADD_EXECUTABLE(../bin/bin ${TEST_MATH})#add link libraryTARGET_LINK_LIBRARIES(../bin/bin m)
這是一個測試數學函數的程式的CMakeLists.txt,"#"後面為注釋的內容,CMake的命令全部為大寫
第2行指定產生的工程名為test_math
第4行指定標頭檔目錄為include
第8行指定源檔案目錄為src,並將其賦值給環境變數DIR_SRCS
第10行設定環境變數TEST_MATH的值為環境變數DIR_SRCS的值,此處用於顯示如何用環境變數對環境變數進行賦值
第14行將數學函數庫賦值給環境變數LIBRARIES,當然,可以不用這個環境變數,而在後面直接使用該庫名
第18行用於指定組建檔案,將環境變數TEST_MATH目錄下的所有檔案編譯產生../bin目錄下的可執行檔bin
第20行指定../bin/bin執行時的連結庫為環境變數LIBRARIES的值-libm.so
下面給出源檔案
/src/main.c:
#include<stdio.h>#include"../include/a.h"int main(){ double b=25.0; double a=0.0; a=get_sqrt(b); printf("a is %lf, b is %lf\n",a,b); return 0;}
/src/a.c
#include"../include/a.h"double get_sqrt(double var1){ return sqrt(var1);}
/include/a.h
#ifndef A_FILE_HEADER_INC
#define A_FILE_HEADER_INC#include<math.h> double get_sqrt(double var1); #endif
將CMakeLists.txt放在目前的目錄下,執行CMakeLists.txt
$> cmake .$> make
即可產生可執行檔,在目錄/bin下的bin檔案,好了運行看其效果是否和所想一樣。