Cmake语法使用

目录

1. CMake简介

2. 基本命令


1. CMake简介

CMake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。

现如今,有各种各样的 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。针对每一种Make工具写一遍Makefile显然非常浪费时间。

CMake 就是针对上面问题所设计的工具:首先,它允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件。

在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:
1)  编写 CMake 配置文件 CMakeLists.txt 。
2)  执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile(ccmake 和 cmake 的区别在于前者  提供了一个交互式的界面)。其中, PATH 是 CMakeLists.txt 所在的目录。
3)  使用 make 命令进行编译。

2. 基本命令

#cmake最低版本
cmake_minimum_required(VERSION 3.6.0)

#指定项目
project(Main)

add_executable(demo demo.cpp) # 生成可执行文件
add_library(common STATIC util.cpp) # 生成静态库
add_library(common SHARED util.cpp) # 生成动态库或共享库

搜索c/cpp文件

# 搜索当前目录下的所有.cpp文件, 但不能查找子目录
aux_source_directory(. SRC_LIST) 
add_library(demo ${SRC_LIST})

#也可以 
file(GLOB DIR_SRCS *.c)
add_executable(main ${DIR_SRCS})

使用子目录中的CMakeList

# 添加 child 子目录下的cmakelist
add_subdirectory(child)
# 指定生成目标 
add_library(main ${DIR_SRCS})
# 添加链接库
target_link_libraries(main child)
//--------------------------------------
# child中设置
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库 默认生成静态库
add_library (child ${DIR_LIB_SRCS})
#指定编译为静态库
add_library (child STATIC ${DIR_LIB_SRCS})

设置预编译宏

#设置预编译宏 cflag和cxxflag
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST"  )
set(CMAKE_Cxx_FLAGS "${CMAKE_Cxx_FLAGS} -DTEST"  )

引入头文件

#这样就可以使用 #include <xx> 引入 
#否则需要使用 #include "path/xx" 
include_directories( imported-lib/include/ )

逻辑判断语句

#逻辑判断 计较字符串
set(ANDROID_ABI "areambi-v7a")
if(${ANDROID_ABI} STREQUAL "areambi")
  	message("armv5")
elseif(${ANDROID_ABI} STREQUAL "areambi-v7a")
	message("armv7a")
else()
	
endif()

build.gradle配置

//还可以在gradle中使用 arguments  设置一些配置
externalNativeBuild {
      cmake {
        arguments "-DANDROID_TOOLCHAIN=clang",	//使用的编译器clang/gcc
                  "-DANDROID_STL=gnustl_static" //cmake默认就是 gnustl_static
        cFlags "" //这里也可以指定cflag和cxxflag,效果和之前的cmakelist里使用一样
        cppFlags "" 
      }
    }	

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值