这就需要额外学习一点东西了: VC++ 内的微软编译器 MSVC cl.exe 使用? 自动完成「编译->链接->运行C++文件」流程?...首先我们可以得到 cl.exe 编译链接的方法,由 gecode说明书MPG[1] : cl /DNDEBUG /EHsc /MD /wd4355 -I "D:\Program Files\gecode.../$filename.obj /link /LIBPATH:"D:\Program Files\gecode\lib" 如上,先编译为 .obj ,再链接,链接时别忘了告诉编译器 *.lib 都放在哪里...我们不可能每次运行程序时,都向命令行输入这么长一串命令,于是我想到: 把这个过程写在 makefile 里?...如何使用? 当我有一个脚本 abc.cpp ,我只需要在命令行输入 test abc 就可以自动 编译->链接->运行C++文件abc.cpp了!
当我写出一个1+1的程序时,得到的结果是3或者得不到结果,我就会很迷茫,进而只能根据自己有限的知识与检索能力逐一进行排查: •程序语法有错误吗?通常不会有,否则编译时会报错;•程序逻辑有错误吗?...•是编译器的问题吗?•是操作系统不兼容的问题吗?•... 大部分情况下,我们可以通过互联网得到解决方案,因为我们的错误有人犯过,并且他/她自己或者其他高手已经给出了解决方案。...但是当我们在自己的领域深挖时,我们面临的问题只有我们自己经历过,这将导致没有人能为我们提供手把手的指导。...,没有查到类似错误及其解决方案•最后,我下载 VC ,使用 MSVC 里面的 cl.exe 直接搭配 gecode 的 64 位安装包,成功运行了实例 但之后还面临一系列问题,这里不详述......•比如在这个例子里,我第一次脱离 VC 使用命令行直接调用微软的 cl.exe ,我知道了 Cygwin 及其背后的大概原理... 卸掉思想负担,轻装而行。
环境准备 由于VS Code只是编辑器,其默认不支持C/C++开发,所以使用VS Code进行C/C++开发时,需要借助插件,并需要配置编译器和调试器。...配置VS VS Code使用VS的编译器和调试器时存在一个前提——VS正确安装。由于VS Code限制仅当从VS开发人员命令提示符处运行 VS Code 时,cl.exe生成和调试才可用。...为避免每次使用VS进行调试时都需要从VS开发人员命令提示符处运行VS Code,可以编写一个bat文件,只要执行该脚本便可保证VS Code是从VS开发人员命令提示符处运行。...where gcc where g++ 综上,既可以使用VS和MinGW进行编译和调试,切记使用VS的编译器和调试器时需要使用如上的脚本从VS开发人员命令提示符处启动VS Code。 4....整体的文件布局如下: 此时若直接使用单文件的task.json和launch.json文件,会出现找不到add函数的错误,此时仅需要修改task.json文件,告知编译器此时的源文件不再是main.cpp
一、问题 1 及解决方法 1、问题 1 描述 我在配置交叉编译环境时,所需要的编译器是 arm-linux-gnueabihf-gcc,且 arm-linux-gnueabihf-gcc 是 arm-linux-gnueabihf-gcc...-4.9.1 的软连接,也可以看到在 bin 目录下存在此编译器: 但是当我输入 arm-linux-gnueabihf-gcc -v 查看编译器版本时,出现 bash: arm-linux-gnueabihf-gcc...这个文件不是为 ARM 架构编译的交叉编译器,而是一个标准的 Linux 可执行文件,且是为较旧的 Linux 内核版本编译的。...:108:scripts/kconfig/mconf.o] 错误 1 make: *** [Makefile:541:menuconfig] 错误 遇到的错误提示 fatal error: curses.h...: 没有那个文件或目录 表明您在尝试编译 Linux 内核配置界面时,系统找不到 curses.h 头文件。
它会告诉 make 在遇到第一个错误时不要停下,而是继续更新不受该错误影响的目标。...习惯上,使用伪目标 all 作为默认目标。 我会用 game 作为新的 all 目标的一个先决条件。更多实际目标,可以作为必要条件加入到默认目标中。...传统上,使用叫做 CC 的宏表示 C 编译器,CFLAGS 表示传递给 C 编译器的标志,LDFLAGS 表示当 C 编译器链接时的标志,LDLIBS 表示库链接时的标志。...使用递归的 Makefile 毫无益处。好的选择是在项目的根目录放置一个 Makefile, 在那里进行调用。你可能需要告诉你的编辑器如何做到这一点。 当涉及子目录下的文件时,在名字中包含子目录即可。...他们的 cl.exe 编译器使用 .obj 作为目标文件扩展名, .exe 作为二进制扩展名,这两个扩展名与 unix 系统都不同,所以它有一些不同的内置推断规则。
其实就是,把 list 中的值依次拿出来传给变量 var ,并依次使用 text 来处理已被赋值的 var ,每次得到的结果作为返回值序列的一个值。...当整个 makefile 扫描完毕后,make 会尝试通过规则来创建被 include 引入但搜索失败的的那个文件。如果创建失败,文件将会保存退出。....DEFAULT: Makefile 中,这个特殊目标所在规则定义的命令,被用在重建那些没有具体规则的目标,就是说一个文件作为某个规则的依赖,却不是另外一个规则的目标时,make 程序无法找到重建此文件的规则...如果函数出现在命令中或者一个递归的变量定义时,读取 makefile 时不会出现错误,只有包含 error 函数引用的命令被执行,或者定义中引用此函数的递归变量被展开时,才会提示致命错误信息 TEXT…...所以, error 函数一般不出现在直接展开式的变量定义中,否则在 make 读取 makefile 文件时将会提示致命错误。
QT的项目工程默认使用的是qmake,这本来也没什么问题。但是由于要用到vcpkg这个工具来管理第三方库,好像这个 vcpkg工具只能在cmake的项目中才能使用。...如果你的源码使用了三方库或者生成了动态链接库,那么需要手动将需要的dll文件复制到目录下,实际运行试试,是不是可以正常运行。...总之比makefile好看多了,再也不愿回到makefile了。 需要多总结多记,看的多用的多了就熟了吧。...- done -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe...Generating done -- Build files have been written to: E:/work/test/cmake-build-debug [Finished] 引用: 配置CLion作为
为了构建工具,我需要更改为使用DevPartner编译器(nmcl.exe)。 此外,我需要将编译器设置添加到现有的CXX_FLAGS以进行检测。 我该如何去做这件事?...我们还需要将仪器类型传递给nmdevenv作为第一个参数。...综上所述 使用Cmake生成CMakeCache.txt和目录 修改CmakeCahe 使用NMDevenv作为MAKE程序 添加/ NMon切换到标志 运行CmakeGui并再次生成.../ nmbcon是一个编译标志,表示使用BC instrumentation / nmtxon将用于覆盖率分析 CPP = cl.exe时 CPP_PROJ = / nologo / MD / W3 /...对于VS2010,这似乎是一个非常简单的修改,就像我们的一个用户从命令行使用MSBuild所需要的那样。 在第一次构建之后的“在哪里构建二进制文件”中,将有.vcxproj.user文件。
概述 Qt开发环境需要分为三个部分: C++编译器(gcc、cl.exe…)注意:编译器不是IDE,编译器是IDE调用的一个程序 Qt SDK,是一个软件开发工具包。...比如Windows版本Qt SDK里已经内置了C++编译器(内置的编辑器是mingw,Windows版本的gcc/g++),要想使用VS内置的cl.exe作为编译器也可以,但是需要额外配置很多东西,容易出错...(1)Qt官方提供的Qt Creator,虽然在使用过程中存在不少bug,但是整体来说使用起来更方便,适合初学者 (2)VS,功能更强,但是需要额外配置很多东西,容易出错 (3)Eclipse 上述说是安装三个.../qt/archive/qt/ 1.打开官网,出现如下界面,我们使用一个5.14版本 点开5.14版本,选择一个小版本,点开后选择我们所需要下载的Qt SDK 安装Qt SDK 下载完成后的一个安装包...如果电脑磁盘空间允许,建议全选以便后续使⽤,如果空间不允许,请看第5步 选择部分组件;说明:其他未安装的组件在使⽤时可以另⾏添加 同意安装协议 继续下一步 安装 配置环境变量
、makefile、GNUmakefile,make会在当前目录下自动寻找找三个文件名 如果同时存在执行makefile;如果没有找到的话,make就无法继续编译程序,产生一个错误并退出;如果名称自定的话...规则中也可以没有命令,仅仅包含目标和目标依赖,仅仅用来描述一种依赖关系,但一个规则中一定要有一个目标。 默认目标 一个Makefile文件里通常会有多个目标,一般会选择第一个作为默认目标。...Makefile文件中a.out是文件中的第一个目标,当我们在make编译时没有给make指定要生成的目标,make就会选择Makefile文件中的第一个目标作为默认目标。...但是当我们修改程序后,再次使用make编译,make只编译你新添加或修改了的源文件。 make是根据时间戳来判断一个规则中的目标依赖文件是否有更新。...对于规则中的每一个命令,make会开一个进程执行,每条命令执行完,make会监测每个命令的返回码。
比如: –error-log-path=定义了运行期出现错误信息时写入log日志文件的路径。 –http-log-path=定义了运行期处理完HTTP请求后,将执行结果写入log日志文件的路径。...改变编译器选项 Nginx由C语言开发,因此默认使用的C编译器,由于C++向前兼容C语言,如果你使用了C++编写的Nginx模块,可以通过–cc-opt等选项,将C编译器修改为C++编译器,这就可以支持...比如当我们需要使用最新的TLS1.3时,可以下载最新的openssl源码包,再通过–with-openssl=选项指定源码目录,让Makefile使用它去编译Nginx。...比如返回HTML、JS、CSS等文本文件时,若配置了gzip on;指令,就可以添加content-encoding: gzip头部,并使用zlib库压缩包体。...因此,当我们首次安装Nginx时,只需要先执行make命令编译出可执行文件,再执行make install安装到目标路径即可。
它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。...下面是一个使用了 STL HeaderUnits 的模块例子,例如: stl_headerunit$ xmake [ 0%]: generating.cxx.module.deps src/main.cpp...$ xmake watch -c "xmake; xmake run" 上面的命令列表是作为字符串传递,这对于复杂命令参数,需要转义比较繁琐不够灵活,那么我们可以使用下面的方式进行任意命令的设置。...因此我们加上了行缓冲刷新支持,提高了输出回显的实时性,使得用户在远程编译时,更接近本地编译的体验。...另外,msvc 的 rc.exe 资源编译器本身是无法提供头文件依赖分析的,但是 cl.exe 的预处理器却是可以处理资源文件的。
在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是UNIX下的GCC和CC。...在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。...而如果一个规则是以“.IGNORE”作为目标的,那么这个规则中的所有命令将会忽略错误。这些是不同级别的防止命令出错的方法,你可以根据你的不同喜欢设置。...当我们的变量$(CC)值是“gcc”时,目标foo的规则是: foo: (objects)(CC) -o foo (objects) (libs_for_gcc) 而当我们的变量$(CC)值不是“gcc...这就是说,shell函数把执行操作系统命令后的输出作为函数返回。
尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。...编译时,编译器需要的是语法的正确,函数与变量的声明的正确。...在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。...那么, make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 如果找到,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。...但我们现在依然还是没能解决当我们只修改一个文件时就要全部重新编译的问题。
VS2005 编译 Qt4.8.2库,并修正源码中的错误 从昨天开始利用VS2005对Qt4.8.2库进行编译,在编译到某个文件时,总是报错,提示VS的cl.exe和nmake.exe返回致命错误。...NMAKE : fatal error U1077: “"d:\Program Files\Microsoft Visual Studio 8\VC\BIN\ cl.EXE"”: 返回代码“0x2”...NMAKE : fatal error U1077: “cd”: 返回代码“0x2” Stop. 于是将注意力集中在了编译器上,试验了几次,都失败了,及时重新安装了vs2005,也没有解决问题。...之后就可以在 VS2005 里自由的使用 QT Designer 和 后来仔细发现,编译器其实已经调试到了错误地址: platform\DefaultLocalizationStrategy.cpp(327...word").replace("", truncatedStringForLookupMenuItem(selectedString)); 正是语句中两边使用了错误的引号
在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是UNIX下的GCC和CC。...在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。...而如果一个规则是以“.IGNORE”作为目标的,那么这个规则中的所有命令将会忽略错误。这些是不同级别的防止命令出错的方法,你可以根据你的不同喜欢设置。...当我们的变量$(CC)值是“gcc”时,目标foo的规则是: foo: $(objects) $(CC) -o foo $(objects) $(libs_for_gcc) 而当我们的变量...1 —— 如果make运行时出现任何错误,其返回1。 2 —— 如果你使用了make的“-q”选项,并且make使得一些目标不需要更新,那么返回2。
好了,言归正传,首先,我们用VC2005写了一个不使用MFC的存C或者C++的程序,怎么发布给最终用户呢?...我们选择/MD选项,这时链接就可以通过,但如果我们想要用/MT选项来使用静态C runtime库,就会报一大堆某某函数链接重复之类的错误。...经验告诉我们,之所以不能使用/MT来编译,是因为另外一个库——Qt库使用了另外一种引用方式/MD(原则上来说,一个程序里面的所有模块,都应该使用同一种引用方式,具体可以google一下)。...回忆一下刚才我们编译的时候,屏幕上调用cl.exe编译的时候,有这样一个参数:cl.exe .......我们只要在这里把-MD改成-MT,就会使用静态c runtime库编译Qt了。我们当然不可能一个一个地替换这些makefile,关键是找出生成这些参数的模板文件。
命令行属性: 可在命令前、Tab键后加上如下符号: -:执行本命令行如果遇到错误,继续执行而不退出make。 +:总是执行该命令,即使执行make时使用了-n,-q,-t选项。...说明 CC cc 默认使用的编译器 CFLAGS -o 编译器使用的选项 MAKE make make命令 MAKEFLAGS 空 make...: 建立和维护库时,把库名作为目标文件,需要加入库中的文件作为依赖文件。...-f filename或者--file=FILE或者--makefile=FILE:使用指定文件作为makefile文件。...-q:不执行任何命令,返回0表示没有重建目标,返回1表示存在重建目标,返回2表示有错误发生。 -r:忽略隐含规则。 -R:取消预定义变量。同时打开-r选项。 -s:执行但不显示所执行的命令。
-y epel-release yum install … (安装软件 yum remove …(卸载软件 五、自动化构建工具makefile 1、makefile的使用 先在目录下创建一个...以刚才的例子举例,当我们输入make指令时,make指令会在当前目录下寻找makefile/Makefile文件(开头大小写都可以,功能一样的),如果找到,它会找到文件中第一个目标文件test,并把这个文件作为最终的目标文件...,那么会直接退出并报错 当然我们平常不需要中间文件的时直接如下图所示就可以了 (2)清理makefile相关文件 当我们构建项目的时候,工程文件是需要清理的,clean就起到一个清理的作用,它不依赖任何文件...工具,clean 是一个不对应任何文件的目标,make 应该总是执行其命令,而不考虑文件的存在和时间戳 第三,保持makefile的一致性和可维护性,使用伪目标可以让 makefile 的行为更加可预测...$@ 表示规则中的目标文件 $^ 表示规则中的所有依赖文件 $一个依赖文件 六、调试工具–gdb 1、背景 我们在初始学习C语言的时候,如果不是在学校中学的,一般我们用的第一个编译器是
领取专属 10元无门槛券
手把手带您无忧上云