cmake中文版介绍
cmake中文版是一款全新的编程软件,一款能够在这里轻松编程,让每一个用户都能在这里简单的编程、或者封装打包你的语言,让你的编译更轻松。cmake编译软件中文版有着简单的软件界面,支持多种语言的设置,用户可以在这里任意选择一个编程语言,让你的编程更容易。
cmake安装教程
step1:
下载“.zip”文件。
备注:首先,我是下载的“二进制”文件,不是源代码(师兄说源代码还要编译,直接下二进制的吧!)。
其次,我下的是“.zip”文件,不是“.msi”格式。下面主要介绍“.zip”格式的使用方法。
step2:
解压zip文件。
在解压后的文件中找到bin->cmake.exe,它的路径为:“D:\cmake-3.9.0-win64-x64\bin”。这个路径也就是你把解压后的文件放到哪了。即为你的安装路径。
step3:
给cmake.exe添加环境变量。
右键“我的电脑”,选择“属性”,进入高级系统设置。
点击“环境变量”。
在“系统变量”下选择“path”进入“编辑”,添加step2中的路径即可。
备注:添加环境变量可参照OpenCV的配置方法
然后 cmake --version 看看出现版本号即可。
这个是要在cmd命令窗口中输入查看。
cmake中文版语法
1. 初试 cmake 的 helloworld
现在新建一个 hello.cpp 源码文件,代码如下:
#include <stdio.h>
int main(int argc, char* argv[]){
printf("Hello CMake!\n");
}
之前都是采用 gcc hello.cpp -o hello 命令来生成可执行文件,但现在我们用 CMake 这种方式来生成,新建一个 CMakeLists.txt 文件名大小写都按照这个来:
# 指定工程名
PROJECT (HELLO)
# 现阶段,你只需要了解 SET 指令可以用来显式的定义变量即可
# 将 hello.cpp 赋值给 SRC_LIST 变量,也可以指定多个源文件,用空格隔开
# SET(SRC_LIST hello.cpp add.cpp sub.cpp)
SET(SRC_LIST hello.cpp)
# 输出打印构建目录
MESSAGE(STATUS "This is HELLO_BINARY_DIR " ${HELLO_BINARY_DIR})
# 输出打印资源目录
MESSAGE(STATUS "This is HELLO_SOURCE_DIR " ${HELLO_SOURCE_DIR})
# 输出打印资源目录,与HELLO_SOURCE_DIR 一样
MESSAGE(STATUS "This is PROJECT_SOURCE_DIR " ${PROJECT_SOURCE_DIR})
# 输出打印 CMake 资源目录,与 PROJECT_SOURCE_DIR 一样
MESSAGE(STATUS "This is CMAKE_SOURCE_DIR " ${CMAKE_SOURCE_DIR})
# 生成可执行文件 hello ,${SRC_LIST}是引用变量,也就是源文件 hello.cpp
ADD_EXECUTABLE(hello ${SRC_LIST})
新建 build 目录,cd 到 build 目录下,敲 cmake .. 命令,ls 一下会发现 CMake 帮我们生成了 Makefile 等等一些文件。敲 make 命令生成 hello 可执行文件,ls 文件列表如下:
ubuntu@VM-0-9-ubuntu:~/NDK_Day88/t1/build$ ls
CMakeCache.txt CMakeFiles cmake_install.cmake hello Makefile
2. 构建生成 .so 动态库
上面的例子看不出有啥优势,甚至说还不如用 gcc hello.cpp -o hello 来得快,但像 FFmpeg 、OpenCV 等等,类似这样复杂的项目,我们敲命令去构建项目是很麻烦的。下面我们来讲一个稍微复杂一点的例子:
mkdir 新建 3 个目录分别为 src、libs、include 。src 用来存放源文件 add.ccp、sub.cpp、div.cpp。include 用来存放头文件 add.h、div.h、sub.h 。源码如下:
#include "add.h"
int add(int num1, int num2){
return num1 + num2;
}
#include "sub.h"
int sub(int num1, int num2){
return num1 - num2;
}
#include "div.h"
int div(int num1, int num2){
return num1 / num2;
}
基于这些准备工作,我们想用 CMake 来构建一个 libmath.so 动态库,并且将其生成在 libs 目录文件夹下。
# 指定 cmake 最低编译版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
PROJECT (MATH)
# 把当前工程目录下的 src 目录的下的所有 .cpp 和 .c 文件赋值给 SRC_LIST
# AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src SRC_LIST)
FILE(GLOB SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp")
# 打印 SRC_LIST 文件列表
# MESSAGE(STATUS ${SRC_LIST})
# 指定头文件目录
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
# 指定输出 .so 动态库的目录位置
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 指定生成动态库
ADD_LIBRARY(math SHARED ${SRC_LIST})
# 指定生成版本号,VERSION指代动态库版本,SOVERSION指代API版本
# SET_TARGET_PROPERTIES(math PROPERTIES VERSION 1.2 SOVERSION 1)
3. 链接外部动态库和头文件
将 libs 目录和 include 目录 copy 到 hello.cpp 同级目录下,修改 hello.cpp 源码如下:
#include <stdio.h>
#include "add.h"
#include "sub.h"
#include "div.h"
int main(int argc, char* argv[]){
int a = 20;
int b = 10;
printf("%d+%d=%d\n",a,b,add(a,b));
printf("%d-%d=%d\n",a,b,sub(a,b));
printf("%d/%d=%d\n",a,b,div(a,b));
return 0;
}
现在我引用了 include 目录下的头文件,同时需要链接 libs 目录下的 libmath.so ,我们再次创建一个 CMakeLists.txt 来生成可执行文件 hello。
# 指定cmake最低编译版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
# 指定工程的名称
PROJECT(HELLO)
#指定头文件目录位置
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
#添加共享库搜索路径
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)
#生成可执行文件
ADD_EXECUTABLE(hello hello.cpp)
#为hello添加共享库链接
TARGET_LINK_LIBRARIES(hello math)
4. 基于 FFmpeg 开发的 CMakeLists.txt
音视频的播放,在线直播,音视频通话开发,后面可能都得基于 FFmpeg 来写。那么首先我们需要编译 .so 动态库,然后把动态库和头文件 copy 到 AS 来开发,这里我已经编译好了一个 3.3.9 的版本,至于怎么写 shell 编译脚本,会在下篇文章中介绍。目前大伙先直接拿过来用就行了。我把编译好的 .so 动态库和 include 目录拷贝到 AS 工程的 jniLibs 目录下
- 精选留言 来自河北廊坊联通用户 发表于: 2023-12-2
- 能运行就好 好多都被屏蔽了 感谢
- 精选留言 来自内蒙古呼和浩特电信用户 发表于: 2023-9-14
- 小白路过来学习
- 精选留言 来自内蒙古呼和浩特电信用户 发表于: 2023-1-25
- 确实很好用,给个好评
- 精选留言 来自山东临沂移动用户 发表于: 2023-4-18
- 创新十足,喜欢
- 精选留言 来自安徽宣城联通用户 发表于: 2023-7-5
- 一直使用的,很不错的软件!