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,后续会持续更新更优质的项目、工具资源。如果喜欢我的文章的话,欢迎扫码关注我的公众号:非正经程序员
在这里插入图片描述

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