有vs了为什么还要用cmake(没装gcc能用cmake吗)

:暂无数据 2026-05-04 10:00:02 0
读懂本文,您将不仅了解有vs了为什么还要用cmake是什么,更能洞悉没装gcc能用cmake吗背后的逻辑,从而举一反三。

本文目录

没装gcc能用cmake吗

  1. make这一类工具是根据makefile来执行预定的编译器指令和其它相关命令;cmake也是一样,它不光能用gcc,还应该能用其它的编译器,如vs的cl****
  2. make可以理解成是个办事文员,程序员写好了代码,就交待他要怎么怎么编译,为了生成一个项目,都需要怎么怎么做;它和编译器没有必然关系,不过有了它,程序员可以不用每次更新了自己的代码时,从头到脚每个文件都重新编译一次而已。
  3. makefile不一定与某种编译器挂钩,因为它不一定使用该编译器,前面说过一次了
  4. 第一个编译器,……,对这个感兴趣的话可以去看一下编译器实现原理;就C语言来说,C语言是在贝尔电话实验室中诞生的,当然很有可能,第一个C编译器诞生在那个实验室,而且因为没有C语言,它的开发使用了其它更早出现的高级语言如BASIC/algo……甚至于是汇编语言

VS 里面的那个编译器,能单独拿出来给CMake用吗

CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。
通过编写*****,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在*****中简单配置,就可以完成很多复杂的功能,包括写测试用例。
如果有嵌套目录,子目录下可以有自己的*****。
总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。
准备活动:
(1)安装cmake。
下载地址:
根据自己的需要下载相应的包即可,Windows下可以下载zip压缩的绿色版本,还可以下载源代码。
Windows下CMake的使用
(2)运行cmake的方法。(GUI、命令行)
CMake使用步骤:
运行GUI的cmake界面:
cmake-2.8.1-win32-x86\bin\cmake-gui****
Windows下CMake的使用
执行Configure:
运行之后,生成了如下文件:
Windows下CMake的使用
生成Makefile:
执行Generate之后生成如下文件:
Windows下CMake的使用
运行make进行编译:
Windows下CMake的使用
编译完成后,在build目录生成Tutorial****,运行Tutorial**** 25就可以看到运行结果:
Windows下CMake的使用
运行make install安装程序:
Windows下CMake的使用
运行make test进行测试:
Windows下CMake的使用
通过cmake tutorial学习CMake配置方法
可以在源代码的Tests/Turorial目录中找到这个手册对应的代码。
Windows下CMake的使用
1、Step1。
(如果不知道如何使用cmake,以及如何使用编译产生的Turorial****,可先看下前面“CMake使用步骤”的说明,它以Step4为例详细介绍了使用过程,Step1的配置可能不够完全,比如无法运行make install,无法运行make test,但可以参考。)
简单的程序编译。
(1)运行GUI的cmake,指定要编译的源代码路径和二进制文件路径(会自动创建)。
Windows下CMake的使用
(2)点击Configure,配置成功后,再点击Generate。
配置需要选择合适的编译器,虽然我安装了VC2008,但没有配置成功;选择Unix Makefiles,配置成功,它自动找到了DevC++下的gcc****等编译器。
Windows下CMake的使用
(3)在build3目录执行make,就能够编译生成Turorial****了。
D:\Projects\Lab\testngpp\cmake-2.***\Tests\Tutorial\Step1\build3》make
Linking CXX executable Tutorial****
Built target Tutorial
可以运行一下Turorial****:
D:\Projects\Lab\testngpp\cmake-2.***\Tests\Tutorial\Step1\build3》Tutorial****
Tutorial**** Version ***
Usage: Tutorial**** number
D:\Projects\Lab\testngpp\cmake-2.***\Tests\Tutorial\Step1\build3》Tutorial**** 4
The square root of 4 is 2
2、Step2
把子目录编译为库,并且链接到最终的可执行文件。
include_directories ("${PROJECT_SOURCE_DIR}/MathFuncti***")
add_subdirectory (MathFuncti***) # 使得子目录MathFuncti***也能被编译
# add the executable
add_executable (Tutorial *****)
target_link_libraries (Tutorial MathFuncti***)
产生makefile:
在GUI上点击Configure,之后Generate还是灰色,再次点击Configure,Generate就可以点击了。
编译:

为什么要使用CMake+VS编译OpenCV的源码

因为opencv中各个组件都是大家贡献的代码,而且opencv高度依赖机器的指令集等等特性,同时opencv也有众多的可配置项,不同的机器配置不同的操作系统环境会对opencv编译过程产生很多影响,所以如果使用makefile的方式来编译opencv那么opencv的安装将变得十分的复杂。

一,为什么用CMake

Cmake可以通过让开发者描述build参数在一个简单地可以移植的文本文件里,这个文件能够被cmake用来产生类似于MS Visual Studio和Apple’s Xcode的项目文件,当然也有*NIX下的Makefile。
Cmake给同一平台,多机开发环境的很多帮助:
自动搜索所需要的程序,库,头文件的能力,这包含了环境变量和windows的注册表等信息
能够在源码树外进行build,这个功能在很多UNIX环境下很有益处,这个功能使得开发者可以很轻松的删掉整个build目录,而不会担心误删源码文件
创建复杂自定义命令的能力,比如自动生成Qt的moc文件等等
提供配置选项用于额外的组件,比如几个VTK的库是可选的,那么CMake提供选择build哪些库
能够从一个简单地text文件自动生成workspace和project文件
能够很简单的选择使用静态库还是共享库
自动生成文件依赖,并且支持并行build
当开发跨平台的软件时,CMake还能提供其他特性:
能够测试平台的字节序和其他硬件特性
一整套的build配置文件,能够在多平台上很好地工作
支持在多平台上创建共享库
最近CMake项目的进展是拥有了软件测试支持——CTest,此外还有个CPack,是设计用来支持跨平台分发软件的,能够创建本地安装文件,比如可以被NSIS,RPM,Cygwin等使用。
此外还有支持了XCode和VS10。加入了交叉编译功能,CMake能够很好地处理host系统和目标系统的区别。

Cmake和VS分别是用来干什么的

cmakevsqmakeqmake是为Qt量身打造的,使用起来非常方便cmake使用上不如qmake简单直接,但复杂换来的是强大的功能内置的out-ofsource构建。(目前QtCreator为qmake也默认启用了该功能,称:shadowbuild)为各种平台和场景提供条件编译可处理多个可执行文件情况,和很好配合QtTest工作如何选择?UsingCMaketoBuildQtProjects一文中说:对简单的Qt工程,采用qmake对复杂度超过qmake处理能力的,采用cmake尽管如此,如果简单Qt的工程都不知道怎么用cmake构建,复杂的工程,就更不知道如何使用cmake了。还是从简单的学起吧简单的Qt程序#include#includeintmain(intargc,char**argv){QCoreApplicationapp(argc,argv);qDebug()-Ocoff-i-o")endif(MINGW)SET(example_*****/*****)SET(example_MOC_*****)QT4_WRAP_CPP(example_MOCS${example_MOC_SRCS})QT4_ADD_RESOURCES(example_RCC_*****)SET(example_SRCS${example_SRCS}${example_MOCS}${example_RCC_SRCS})ADD_EXECUTABLE(*****${example_SRCS})TARGET_LINK_LIBRARIES(example${QT_LIBRARIES})对Qt的资源文件,使用QT4_ADD_RESOURCES来调用rcc进行预处理对Windows资源文件,直接和源文件一样,添加到列表中即可。只是:MinGW下仅仅这么做还不行,上面的MinGW块用来修复这个问题Debug与Releaseqmake使用qmake时,可以在pro文件内分别为两种模式设置不同的选项。使用时,可以直接makerelease或makedebug来编译不同的版本cmake不同于qmake,由于cmake采用out-of-source方式。故:建立debugrelease两目录,分别在其中执行cmake-DCMAKE_BUILD_TYPE=Debug(或Release)需要编译不同版本时进入不同目录执行make对生成msvc工程的情况,CMAKE_BUILD_TYPE不起作用。生成工程后使用IDE自带的模式选择。

纸上得来终觉浅,绝知此事要躬行。有vs了为什么还要用cmake没装gcc能用cmake吗的理论已备好,期待你的实践成果。
本文编辑:admin

更多文章:


css链接样式有几种(CSS设置链接的样式)

css链接样式有几种(CSS设置链接的样式)

曾几何时,我也觉得css链接样式有几种高不可攀,尤其CSS设置链接的样式更是一头雾水。后来才发现,只是没找对方法,希望我的经验能帮到你。

2026年5月4日 19:20

opengl+和directx+哪个好(OpenGL跟Direct**哪个比较好)

opengl+和directx+哪个好(OpenGL跟Direct**哪个比较好)

花费5分钟阅读本文,您将获得对opengl+和directx+哪个好和OpenGL跟Direct**哪个比较好的清晰认知,远超自己搜索数小时的效果。

2026年5月4日 19:00

json文件怎么编写(macbook air怎么创建json文件)

json文件怎么编写(macbook air怎么创建json文件)

有研究表明,成功掌握json文件怎么编写的学习者,普遍在macbook air怎么创建json文件这个环节投入了更多精力。其重要性不言而喻。

2026年5月4日 18:40

ui设计好找工作吗?(UI设计现状怎么样,好找工作吗)

ui设计好找工作吗?(UI设计现状怎么样,好找工作吗)

很多朋友初次接触ui设计好找工作吗?可能会觉得有点陌生,这很正常。今天这篇文章,咱们就一起把UI设计现状怎么样,好找工作吗这事儿聊透,希望能帮您理清思路。

2026年5月4日 18:20

python可以做软件吗(python能写软件吗)

python可以做软件吗(python能写软件吗)

老铁们,关于python可以做软件吗,你可能听过不少说法。今天,咱们就坐下来好好聊聊python能写软件吗,保证让你豁然开朗。

2026年5月4日 18:00

url编码教程(steam里面的个人URL怎么设置)

url编码教程(steam里面的个人URL怎么设置)

就像学骑车需要掌握平衡一样,理解url编码教程的窍门,恰恰在于把握好steam里面的个人URL怎么设置这个“平衡点”。

2026年5月4日 17:40

专题页是什么(什么是专题页 什么关键词适合做专题页 专题页有什么优势 特点 什么情况下使用专题页)

专题页是什么(什么是专题页 什么关键词适合做专题页 专题页有什么优势 特点 什么情况下使用专题页)

读懂本文,您将不仅了解专题页是什么是什么,更能洞悉什么是专题页 什么关键词适合做专题页 专题页有什么优势 特点 什么情况下使用专题页背后的逻辑,从而举一反三。

2026年5月4日 17:20

绝对值函数excel公式怎么打(EXCEL中绝对值符号怎么打)

绝对值函数excel公式怎么打(EXCEL中绝对值符号怎么打)

本篇关于绝对值函数excel公式怎么打的讲解,将摒弃陈词滥调,直击EXCEL中绝对值符号怎么打这一实战要害,给你可即刻应用的策略。

2026年5月4日 17:00

小型数据库系统有哪些(数据库有哪些)

小型数据库系统有哪些(数据库有哪些)

关于小型数据库系统有哪些,有一个概念至关重要,那就是数据库有哪些。它为何如此重要?且听我们慢慢道来。

2026年5月4日 16:40

strcpy a b 什么意思(c语言中的char *a,*b; strcpy(a,b);与a=b;有什么区别)

strcpy a b 什么意思(c语言中的char *a,*b; strcpy(a,b);与a=b;有什么区别)

我们整理了关于strcpy a b 什么意思最高频的提问,发现c语言中的char *a,*b; strcpy(a,b);与a=b;有什么区别位列榜首。于是,就有了这篇集中解答的精华帖。

2026年5月4日 16:20

最近更新

opengl+和directx+哪个好(OpenGL跟Direct**哪个比较好)
2026-05-04 19:00:01 浏览:0
热门文章

split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
标签列表