標籤:

CMake使用總結(2)

CMake使用總結(2)琴劍

本文使用docbook書寫,您可以在這裡獲得xml文件

Abstract

本文總結了CMake在linux嵌入式系統項目開發中的應用


Table of Contents

前言
項目文件組織
常用的幾個內置變數
常用的命令
小結
參考書目

前言

在前面一篇文章中,我們從一個sample入手,了解了CMake的基本用法和語法。但這個例子與實際開發還有一段距離,主要存在以下幾點問題:

  • 生成的二進位程序和源程序混在一起
  • 使用gcc進程程序編譯,而不是使用交叉編譯工具
  • 為指定編譯選項,通常會生成debug版本供調試用,release版本用於發布
  • 在本章,我們將sample程序逐步改造,解決上述問題。

    項目文件組織

    一個項目,通常包含若干子模塊。比如上一篇的sample,我們可以認為它包含兩個子模塊,Hello為程序庫,Demo為主程序。很少有項目會把目標二進位文件和源程序放在一起的,通常會建立一個bin目錄,存放生成的二進位文件,發布程序則放在release。根據我在項目開發中的習慣,將目錄結構修改如下:

    CMakeSample |--- release |--- doc |--- lib |--- source |--- include |--- bin |--- Hello |--- Demo

    其中,release存放程序發布相關文件,包括程序文件、腳本、參數等。doc包含項目開發中的相關文檔,如設計說明以及通過doxgen等工具從代碼中生成的文檔。lib存放項目中使用的第三方庫,項目中自己編寫的庫不放在此目錄,應該作為項目的一個模塊放在source目錄下。include包含整個項目中使用的公共頭文件,如果子模塊中的頭文件僅在該子模塊類使用,不需放到include目錄。bin目錄存放編譯後的調試版本代碼。其它的子目錄則為各模塊的代碼及頭文件。

    按照以上目錄結構,將Hello下的hello.h移到include目錄,因為這個頭文件被Demo模塊包含。這個sample中未使用第三方庫,所以暫時為空。

    常用的幾個內置變數

    從上文中我們知道,通過set語句可以自定義變數,然而,CMake還包含大量的內置變數,這些變數和自定義變數的用法沒有區別,下面就列出一些常用的變數:

  • CMAKE_C_COMPILER

    指定C編譯器,通常,CMake運行時能夠自動檢測C語言編譯器。進行嵌入式系統開發時,通常需要設置此變數,指定交叉編譯器。

  • CMAKE_CXX_COMPILER

    指定C++編譯器

  • CMAKE_C_FLAGS

    指定編譯C文件時編譯選項,比如-g指定產生調試信息。也可以通過add_definitions命令添加編譯選項。

  • EXECUTABLE_OUTPUT_PATH

    指定可執行文件存放的路徑。

  • LIBRARY_OUTPUT_PATH

    指定庫文件放置的路徑

  • 常用的命令

    除了內置變數,我們還可以通過命令來修改編譯選項,現將一些常用的命令列出來:

  • include_directories

    指定頭文件的搜索路徑,相當於指定gcc編譯器的-I參數

  • link_directories

    動態鏈接庫或靜態鏈接庫的搜索路徑,相當於指>定gcc的-L參數

  • add_subdirectory

    包含子目錄,當工程包含多個子目錄時,此命令有用

  • add_definitions

    添加編譯參數,比如add_definitions(-DDEBUG)將在gcc命令行添加DEBUG宏定義

  • add_executable

    編譯可執行程序

  • target_link_libraries

    指定鏈接庫,相同於指定-l參數

  • 小結本文經過修改目錄結構,指定編譯工具鏈,生成動態鏈接庫等動作,將前文的sample修改成一個比較接近實際工程的嵌入式環境。當然這個sample仍然只是一個自娛自樂的小玩意,但對於說明CMake用法已經足夠了,有了這些基本的CMake知識,在項目中使用CMake就成為可能了。當然不同的環境會遇到一些新問題,藉助於互聯網,沒有什麼解決不了的問題。趕快動手吧,拋棄手工編寫Makefile的痛苦,加入CMake使用者行列吧。 參考書目

    Jan Engels. CMake Tutorial.


    推薦閱讀:

    使用 CMake 不用路徑地調用 libclang
    解決 Windows 下 Python 安裝 Dlib 的問題:Cmake 找不到 boost
    macOS Sierra10.12.6下安裝OpenCV3.3.0
    如何安裝opencv_contrib及解決其安裝編譯問題
    Ubuntu下邊用邊學CMAKE(一)

    TAG:總結 | CMake |