Cmake 簡(jiǎn)單使用

一. CMake編譯原理

??CMake是一種跨平臺(tái)編譯工具,比make更為高級(jí),使用起來(lái)要方便得多。CMake主要是編寫CMakeLists.txt文件,然后用cmake命令將CMakeLists.txt文件轉(zhuǎn)化為make所需要的makefile文件,最后用make命令編譯源碼生成可執(zhí)行程序或共享庫(kù)(so(shared object))。因此CMake的編譯基本就兩個(gè)步驟:

cmake
make

??cmake 指向CMakeLists.txt所在的目錄,例如cmake .. /表示CMakeLists.txt在當(dāng)前目錄的上一級(jí)目錄。cmake后會(huì)生成很多編譯的中間文件以及makefile文件,所以一般建議新建一個(gè)新的目錄,專門用來(lái)編譯,例如:

mkdir build
cd build
cmake ../
make

make根據(jù)生成makefile文件,編譯程序。

二. CMakeLists.txt文件編寫

#表示注釋   
#cmake file for project association

#cmake 最低版本要求,低于2.8 構(gòu)建過(guò)程會(huì)被終止。   
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

#定義工程名稱
PROJECT(association)
                     
#打印相關(guān)消息消息   
#MESSAGE(STATUS "Project: ${PROJECT_NAME}")
#MESSAGE(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")  

#指定編譯類型debug版
SET(CMAKE_BUILE_TYPE DEBUG)
#發(fā)行版
#SET(CMAKE_BUILE_TYPE RELEASE)

#SET(CMAKE_C_FLAGS_DEBUG "-g -Wall")          #C
#SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")           #C++

#設(shè)置C++ 編譯
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -s -Wall -W -O3")   
 
#添加子目錄   
ADD_SUBDIRECTORY(src/include)

#設(shè)置變量,表示所有的源文件  
SET(SOURCE_FILES
    src/main.cpp    
    )


#配置相關(guān)庫(kù)文件的目錄,  
LINK_DIRECTORIES(                                  
    /usr/local/lib
    )  

#找BZip2
FIND_PACKAGE(BZip2)
if (BZIP2_FOUND)
    MESSAGE(STATUS "${BZIP_INCLUDE_DIRS}")  
    MESSAGE(STATUS " ${BZIP2_LIBRARIES}")  
endif (BZIP2_FOUND)
if (NOT BZIP2_FOUND)
    MESSAGE(STATUS "NOT  BZIP2_FOUND")  
endif (NOT  BZIP2_FOUND)


#相關(guān)頭文件的目錄
INCLUDE_DIRECTORIES(  
     /usr/local/include  
     ${PROJECT_SOURCE_DIR}/utility_inc
     ${BZIP_INCLUDE_DIRS}
    )

#鏈接庫(kù)
LINK_LIBRARIES(
    ${PROJECT_SOURCE_DIR}/static_libs/libSentinelKeys64.a
    ${BZIP2_LIBRARIES}
    )

#生成可執(zhí)行文件
ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCE_FILES})

#依賴的庫(kù)文件  
TARGET_LINK_LIBRARIES(${PROJECT_NAME} eventloop)

三. 子目錄CMakeLists.txt文件編寫

SET(EVENTLOOP_SOURCE_FILES
        tool/BlockingQueue.hpp
        tool/Copyable.h
        tool/ExecuteState.h
        tool/Likely.h
        EventLoop.h
        EventLoop.cpp
        )
#生成靜態(tài)鏈接庫(kù)eventloop 
ADD_LIBRARY(eventloop ${EVENTLOOP_SOURCE_FILES})

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 注:首發(fā)地址 1. 前言 當(dāng)在做 Android NDK 開發(fā)時(shí),如果不熟悉用 CMake 來(lái)構(gòu)建,讀不懂 CMa...
    cfanr閱讀 24,803評(píng)論 1 53
  • 1.安裝 $sudo apt-get install cmake 2.示例:簡(jiǎn)單的文件目錄 sample |—...
    荷包蛋醬閱讀 29,906評(píng)論 0 15
  • CMake學(xué)習(xí) 本篇分享一下有關(guān)CMake的一些學(xué)習(xí)心得以及相關(guān)使用。 本文目錄如下: [1、CMake介紹] [...
    AlphaGL閱讀 12,441評(píng)論 11 79
  • 我特別喜歡下雨天,因?yàn)槲壹依镏挥邢掠晏斓臅r(shí)候才可以不在田地里干農(nóng)活,可以做自己喜歡做的事。下雨天,我喜歡伴著好聽又...
    柳木雨閱讀 13,805評(píng)論 25 190
  • 孤獨(dú)的風(fēng)琴手 你總是一個(gè)人 默默地佇立在街頭 拉著不知名的歌曲 時(shí)常 有行色匆匆的少年 為你停下腳步 但他并不駐留...
    行_客閱讀 314評(píng)論 0 0

友情鏈接更多精彩內(nèi)容