cmake入门

一、cmake干什么用的

cmake是一款项目构建工具,它不生成最终的程序,而是生成makefile或者其他平台的编译文件。

  • TIPS
    • CMAKE不区分window和linux两种不同路径的写法

二、 常用语法

  1. CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

2.项目名称 版本号设置

project (Demo2 VERSION 1.0)

3.查找当前目录下的所有源文件并将名称保存到 DIR_SRCS 变量

aux_source_directory(. DIR_SRCS)

4.指定生成目标

add_executable(Demo ${DIR_SRCS})

5.设置c++版本标准

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

6.设置使用何种策略

cmake_policy(SET CMP0025 NEW)

7.定义自己的cmake模块在何路径

SET(CMAKE_MODULE_PATH {CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)

8.版本号设置 major (主版本号码)minor(次版本号)patch(补丁)

set(LIB_MAJOR_VERSION "1")
set(LIB_MINOR_VERSION "1")
set(LIB_PATCH_VERSION "0")

9.设置可选项
设置了可选项后,可以在cmake中定义不同的宏,然后在源代码中判断

option(TEST_DEBUG "option for debug" OFF)
if(TEST_DEBUG)
add_definitions(-DTEST_DEBUG)
endif()

c++源代码中可以进行宏判断

#ifdef TEST_DEBUG
fun()
#endif

10.编译器供应上

messag(${CMAKE_CXX_COMPILER_ID})

以上语句在windows中输出MSVC
在centos6.5中输出GNU
11.判断编译平台

IF(UNIX OR CYGWIN)
    SET(_CMAKE_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}")
ELSEIF(WIN32)
    SET(_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/cmake")
ENDIF()

12.find_package() 引入外部依赖包
Cmake之深入理解find_package()的用法

find_package(CURL)
add_executable(curltest curltest.cc)
if(CURL_FOUND)  
    target_include_directories(clib PRIVATE ${CURL_INCLUDE_DIR})            target_link_libraries(curltest ${CURL_LIBRARY})
else(CURL_FOUND)    
    message(FATAL_ERROR ”CURL library not found”)
endif(CURL_FOUND)
  1. add_custom_target 添加不在ALL中的target
    《CMake之add_custom_target》

三、 .cmake文件作用

cmake可以被include,以达到复用其中函数的作用

3.1 CMake的几种Include

《Cmake的几种include》

《对于target_include_directories的private,public,interface详细的解释》

3.2 CMAKE_BUILD_TYPE的几种取值

CMAKE_C_FLAGS_DEBUG is -g
CMAKE_C_FLAGS_RELEASE is -O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO is -O2 -g -DNDEBUG
CMAKE_C_FLAGS_MINSIZEREL is -Os -DNDEBUG

CMAKE_CXX_FLAGS_DEBUG is -g
CMAKE_CXX_FLAGS_RELEASE is -O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO is -O2 -g -DNDEBUG
CMAKE_CXX_FLAGS_MINSIZEREL is -Os -DNDEBUG

Using cmake, how do you determine the default compiler flags per build type? - Stack Overflow

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值