鱼C论坛

 找回密码
 立即注册
查看: 1010|回复: 3

[已解决]关于cmake

[复制链接]
发表于 2020-7-9 09:31:43 | 显示全部楼层 |阅读模式
30鱼币
各位大佬,有人了解cmake吗,研一小白导师突然让接触这个,不知道这个有啥用,跟普通的C语言编译器有啥区别,不用cmake,可以用其他的熟悉的产品替代吗
通过一些了解知道,它只要特性是跨平台,但能否具体通俗讲一下呢,理解能力有限
最佳答案
2020-7-9 09:31:44
本帖最后由 赚小钱 于 2020-7-9 09:52 编辑

cmake 是一个跨平台的构建工具。

原来 *nix 平台,直接使用 makefile,windows 平台使用 sln 工程,对于很多目标是跨平台的应用很不友好,需要写两份。同时,makefile 的语法门槛较高。

而 cmake 提供了一套友好的语法,比如
target_link_libraries
就可以很友好的为二进制文件指定动态链接库

更多教程


而且,cmake 不是独立于 makefile sln 等现有成熟的构建体系之外另起炉灶,而是充当了翻译层
即,允许开发者使用易学,通用的语法,来编写构建规则(CMakeLists.txt) ,cmake 负责将CMakeLists.txt 进一步编译为 makefile,sln

补充一下,前天自己使用 cmake 学到一个超赞的功能 FetchContent,c++ 有一些库是只有头文件的,FetchContent 就支持,只需要在 CMakeLists.txt 中声明要使用的库头文件位置(URL),在编译的时候,cmake 自动帮助你下载,简直不要更方便了。

最佳答案

查看完整内容

cmake 是一个跨平台的构建工具。 原来 *nix 平台,直接使用 makefile,windows 平台使用 sln 工程,对于很多目标是跨平台的应用很不友好,需要写两份。同时,makefile 的语法门槛较高。 而 cmake 提供了一套友好的语法,比如 就可以很友好的为二进制文件指定动态链接库 更多教程 而且,cmake 不是独立于 makefile sln 等现有成熟的构建体系之外另起炉灶,而是充当了翻译层 即,允许开发者使用易学,通用的语法, ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-9 09:31:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 赚小钱 于 2020-7-9 09:52 编辑

cmake 是一个跨平台的构建工具。

原来 *nix 平台,直接使用 makefile,windows 平台使用 sln 工程,对于很多目标是跨平台的应用很不友好,需要写两份。同时,makefile 的语法门槛较高。

而 cmake 提供了一套友好的语法,比如
target_link_libraries
就可以很友好的为二进制文件指定动态链接库

更多教程


而且,cmake 不是独立于 makefile sln 等现有成熟的构建体系之外另起炉灶,而是充当了翻译层
即,允许开发者使用易学,通用的语法,来编写构建规则(CMakeLists.txt) ,cmake 负责将CMakeLists.txt 进一步编译为 makefile,sln

补充一下,前天自己使用 cmake 学到一个超赞的功能 FetchContent,c++ 有一些库是只有头文件的,FetchContent 就支持,只需要在 CMakeLists.txt 中声明要使用的库头文件位置(URL),在编译的时候,cmake 自动帮助你下载,简直不要更方便了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-9 10:15:42 | 显示全部楼层
赚小钱 发表于 2020-7-9 09:49
cmake 是一个跨平台的构建工具。

原来 *nix 平台,直接使用 makefile,windows 平台使用 sln 工程,对于 ...

他跟普通编译器比如说VS,有区别吗,或者说区别在哪里呢?有一点粗浅的理解,就是讲各个需要的文件打包,然后可以跨平台使用,这样理解的对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-9 15:42:28 | 显示全部楼层
Tau-li 发表于 2020-7-9 10:15
他跟普通编译器比如说VS,有区别吗,或者说区别在哪里呢?有一点粗浅的理解,就是讲各个需要的文件打包, ...

cmake 不是编译器,是一个项目构建工具。

编译器是指,将源代码,转换成字节码(java) 或者 二进制(c) 的东西。比如 javac(java), gcc, clang, 不记得微软的 c 编译器叫什么了。

而 cmake 的作用是管理你的项目
比如,在命令行编译程序需要 指定 -I 头文件的位置, -L 库文件的位置 -o 编译输出到哪里。
使用 vs 的时候,要在项目设置里面填入各种信息。

这是 cmake 要做的事情,允许使用类似写代码的方式,来管理你的 c++ 项目,cmake 提供了一些函数 来实现上面说的 -I -L 的方式,使用起来很接近于编程语言。

我在上面也说了,cmake 的输出产物是 makefile(*nix), sln(win) ,根本还没有到编译器 级别。

最终,编译还是要调用 gcc clang 等。

vs 不是编译器,编译器是最终执行的一个二进制文件,vs 叫做 IDE,集成开发环境。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 13:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表