CMake教程之構建《劍指Offer》平臺

一:構建環境

  爲了更快速的熟悉CMake的使用,本人以練代練。在平時做自己的積累學習的項目的時候,儘量使用CMake去構建編譯平臺。這樣即完成了自己的項目,同時也學到了CMake的使用,一舉兩得,何樂而不爲。
  目前使用的平臺是:CMake3.16.4 + VS2015。

二:目錄結構

  該項目是爲了實現《劍指Offer》中的面試例題,所以構建平臺相對簡單,不需要太多的第三方庫。整體目錄結構如下:
  根目錄:
在這裏插入圖片描述
  source目錄:
在這裏插入圖片描述
  ide目錄是我們後面使用cmake工具構建vs工程的根目錄,打開CMake應用程序,如下選擇:
在這裏插入圖片描述
  如上選擇源碼位置和構建工程的目錄,然後點擊Configure進行配置,Generate進行生成。進入ide目錄就可以看到自動生成的Vs工程:
在這裏插入圖片描述
  使用vs2015打開項目可以看到如下工程結構:
在這裏插入圖片描述

三:CMakeLists文件說明

  首先看一下根目錄下的CMakeLists.txt:

cmake_minimum_required(VERSION 3.5.1)

project("EOffer")

# 設置安裝目錄
set(CMAKE_INSTALL_PREFIX /usr/local)

#設置對c++11的支持
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

#設置第三方庫cmake腳本所在目錄
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

#設置編譯目錄
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

#包含源文件
add_subdirectory("source")

  如上的註釋說明,建立工程項目名爲EOffer,支持C++11,以及包含的源文件目錄。
  source文件夾下的CMakeLists也比較簡單,主要添加了需要編譯的文件夾目錄名稱:

add_subdirectory("capture_one")
add_subdirectory("capture_two")
add_subdirectory("platform")

  最主要的是,capture_two作爲模板例子,對platform子項目有所引用,且其編譯結果是可執行文件,以及工程中源碼的.h和.cpp文件要在capture_two文件夾目錄下:

project(capture_two)

file(GLOB capture_two_src "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
source_group(capture_two FILES ${capture_two_src})

add_executable(${PROJECT_NAME} ${capture_two_src})
#add_library(${PROJECT_NAME} SHARED ${capture_two_src})

#爲windows添加宏
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
	add_definitions(-DCAPTURETWO_EXPORTS)
endif()

#添加工程內引用
target_link_libraries(${PROJECT_NAME} platform)

#設置頭文件搜索目錄
include_directories(
	${CMAKE_SOURCE_DIR}/source/capture_two
	${CMAKE_SOURCE_DIR}/source/platform
)
  1. file函數:capture_two項目包含的源碼文件。
  2. add_executable:設置capture_two爲可執行項目。、
  3. target_link_libraries:引用platform項目(platform項目是靜態庫項目)

四:總結

  使用CMake來構建編譯平臺,主要是爲了減少平臺的依賴性,並且爲了後續構建更大型的項目做準備。公司的項目後續如果可能的話,可以使用CMake進行構建,這樣可以減少跨平臺所帶來的不方便。
  源碼鏈接:https://github.com/eaikao/EOffer.git
  同時可以訪問我的github,後續會持續更新更優質的項目、工具資源。如果喜歡我的文章的話,歡迎掃碼關注我的公衆號:非正經程序員
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章