1 CMake简介
CMake 是一个跨平台编译工具。(类似于Unix的Makefile文件、Windows的Visual Studio工程、Mac的Xcode工程),CMake命令根据编写好的CMakeLists.txt自动生成Makefile文件或Visual Studio工程。使用简单,可以避免编写Makefile文件的麻烦。
2 CMake安装
安装步骤简单略
3 CMakeList语法
CMakeList需要我们依照cmake语法规则编写,然后根据不同系统编译即可。
以下是一个简单CMakeList.txt文件
#1 最小版本号
cmake_minimum_required(VERSION 3.6.0)
#2 设置变量 也可在cmake gui界面添加
set(TARGET_NAME faw2021)
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}) #用于指定cmake install时的相对地址前缀
#3 项目名称
project(${TARGET_NAME})
#4 编译选项
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "-std=c++11 -o3 ${CMAKE_CXX_FLAGS}")
#5 设置头文件包含目录
include_directories(
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/add
$ENV{MATLAB_V99}/include
#D:\Program Files\MATLAB_2020\MATLAB Runtime\v99\extern\include
)
#6 添加需要链接的库文件目录 visual studio工程需在编译类型之前生效
link_directories(
${CMAKE_SOURCE_DIR}/3rd_party/libs
${CMAKE_SOURCE_DIR}/vsprojects/add
$ENV{MATLAB_V99}/lib/win64/microsoft
)
#7 设置编译类型
#7.1 可执行文件
file(GLOB HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h )
source_group("Header Files" FILES ${HEADER_FILES})
aux_source_directory(. SRC_LIST) #搜索所有cpp文件
add_executable(${TARGET_NAME} ${SRC_LIST} ${HEADER_FILES})
#7.2 静态库
#add_library(${TARGET_NAME} STATIC ${SRC_LIST})
#7.3 动态库
#add_library(${TARGET_NAME} SHARED ${SRC_LIST})
if(UNIX)
#8 添加依赖的库
target_link_libraries(${TARGET_NAME} mclmcrrt)
target_link_libraries(${TARGET_NAME} add)
#9 将自定义构建规则添加到生成的构建系统
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND echo CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX})
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND echo CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR})
#10 安装
install(TARGETS ${TARGET_NAME} LIBRARY DESTINATION ${CMAKE_BINARY_DIR}/install/lib)
install(FILES faw2021.h DESTINATION ${CMAKE_BINARY_DIR}/install/include)
endif()
#11 调用子系统
add_subdirectory(add)
#12 打印日志
message("")
message(STATUS "1.PROJECT_BINARY_DIR = ${PROJECT_BINARY_DIR}")
message(STATUS "2.PROJECT_SOURCE_DIR = ${PROJECT_SOURCE_DIR}")
message(STATUS "3.CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message(STATUS "4.CMAKE_CURRRENT_BINARY_DIR = ${CMAKE_CURRRENT_BINARY_DIR}")
message(STATUS "4.CMAKE_BINARY_DIR = ${CMAKE_BINARY_DIR}")
message("")
if(WIN32)
message("Windows os")
elseif(APPLE)
message("MacOS")
elseif(UNIX)
message("Linux os")
elseif(ANDROID)
message("Android os")
endif()
message("build faw2021 success")
#其他设置
#SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /level='requireAdministrator' /uiAccess='false'" ) #设置程序以管理员的方式启动
#add_definitions(-DCMCMAERA_EXPORT) #设置宏
4 CMake使用
编写好CMakeList.txt后,放入源代码目录中,并使用CMake编译,目录结构如下图
project
build
3rd_party
include
libs
src
project1
CMakelist.txt
project2
CMakelist.txt
...
CMakelist.txt
CMakelist.txt
4.1 Windows平台使用方法
Windows上编译生成Visual Studio项目,打开安装好的CMake软件,配置完成后生成项目
在生成目录下打开项目,查看目录结构以及运行结果
4.2 Linux平台使用方法
Linux上编译生成Makefile
a 进入工程目录,创建build目录
b 进入build目录 执行cmake ..,生成Makefile
c make 编译并运行