【Free Style】DevCloud:Cmake的多平台编译构建

举报
DevCloud 发表于 2017/10/26 11:55:28 2017/10/26
【摘要】 本文主要介绍CMake编译工具的使用,通过一个简单的C++程序在windows和linux的编译执行过程来深入了解CMake。

 本文主要介绍CMake编译工具的使用,通过一个简单的C++程序在windows和linux的编译执行过程来深入了解CMake。

Window编译环境:

Ø  Win10系统

Ø  Cmake:cmake-3.7.0-win64-x64.msi安装包

Ø  minGW+Msys:mingw-get-setup.exe在线安装包

Linux编译环境:

Ø  华为软件开发云-编译构建服务

“CMake”是“cross platform make”的缩写,是一个跨平台的编译工具, 它比我们常用的“make”更高级,可以在CmakeLists.txt用简单的语句来描述所有平台的编译过程。为了说明CMake给编译带来的简化和优点,我们来简述一下C++语言从简单到复杂项目,涉及不同平台时编译的变化:单文件编译,仅仅一条g++ main.cpp命令即可生成可执行文件a.exe;当源文件越来越多,无法一条一条命令执行时,就需要make自动编译工具,开发人员需要做的就是写make执行时所需要依据的脚本——makefile;但是makefile抽象程度不高,对windows OS也不友好,cmake完美解决了这种多平台编译的问题,Cmake 的工具链非常简单cmake+make, cmake生成标准构建方式的输入,如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces,然后开发人员可以使用自己熟悉的IDE生成最终可执行文件。

代码示例:

helloword.cpp

1.png


CMakeLists.txt

2.png


CMakeLists中的指令是大小写无关的,而参数是大小写相关的。

Ø  cmake_minimum_required() cmake要求的最低版本。

Ø  project(pojectname [CXX] [C] [Java]) projectname为工程名称,后面可以指定支持的语言类型,不注明表示默认支持所有语言。

Ø  AUX_SOURCE_DIRECTORY(参数1 参数2)将所有在参数1路径下的源文件名,以列表的形式赋值给参数2的变量。这条指令比显示定义SET(DIR_SRCS helloword.cpp)更加方便,避免为一个库或可执行目标罗列源文件。

Ø  add_executable(参数1  参数2)参数1是新引入的可执行文件,该文件由对参数2取值获得的源文件列表来编译构建的(变量使用${}方式取值)。参数1在工程范围内必须是唯一的。

Window编译环境:

1.   安装cmake

下载并执行cmake-3.7.0-win64-x64.msi安装包

2.   运行cmake

a)   运行安装路径C:\Program Files\CMake\bin下的cmake-gui.exe。

b)   按照下图配置代码路径,其中build是新建的空文件,是生成的二进制可执行文件存放路径。

3.png

c)   点击“Configure”选择MinGW的默认配置

4.png

Tips:

ü  由于环境变量的设置,可能导致自动load的脚本文件路径错误,需要手动修改,下文就是由于CMAKE_SH错误引起的配置失败。

ü  minGW自带的mingw32-make.exe需要改成make.exe,否则执行下文执行make命令时会提示命令无法找到,当然你也可以通过其它手段修正这个错误。   

5.png

d)   Configure和Generate成功

6.png

Configurelog信息

The C compiler identification is GNU 6.3.0

The CXX compiler identification is GNU 6.3.0

Check for working C compiler: C:/MinGW/bin/gcc.exe

Check for working C compiler: C:/MinGW/bin/gcc.exe -- works

Detecting C compiler ABI info

Detecting C compiler ABI info - done

Detecting C compile features

Detecting C compile features - done

Check for working CXX compiler: C:/MinGW/bin/g++.exe

Check for working CXX compiler: C:/MinGW/bin/g++.exe -- works

Detecting CXX compiler ABI info

Detecting CXX compiler ABI info - done

Detecting CXX compile features

Detecting CXX compile features – done

Configuring done

 

Generate后生成Makefile

 

3.   执行make

在build文件夹下执行make命令,生成最终的bin.exe可执行文件。

7.png


Linux编译环境:

1.   云端建立代码仓库

华为软件开发云的登录地址是https://devcloud.huaweicloud.com/,如果没有账号,请先注册。

代码模板使用cppDemo,实例代码中包含.gitignore,CMakeLists.txt,helloworld.cpp和README.md,其中源文件代码和CMakeLists代码和前文所述一致。


8.png

2.   云端创建构建任务

9.png

3.   执行编译构建

10.png

Tips

ü  输出log中,$ /usr/bin/cmake -G "Unix Makefiles" Generator指定的构建系统,当前创建了Unix系统标准Makefile

 4.   下载可执行包

从【构建】->【构建历史】中下载bin包,通过X*** P传到远端云主机

5.   查看软件包

11.png

6.   执行软件包

12.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。