一:構建環境
爲了更快速的熟悉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
)
- file函數:capture_two項目包含的源碼文件。
- add_executable:設置capture_two爲可執行項目。、
- target_link_libraries:引用platform項目(platform項目是靜態庫項目)
四:總結
使用CMake來構建編譯平臺,主要是爲了減少平臺的依賴性,並且爲了後續構建更大型的項目做準備。公司的項目後續如果可能的話,可以使用CMake進行構建,這樣可以減少跨平臺所帶來的不方便。
源碼鏈接:https://github.com/eaikao/EOffer.git
同時可以訪問我的github,後續會持續更新更優質的項目、工具資源。如果喜歡我的文章的話,歡迎掃碼關注我的公衆號:非正經程序員