镜像下载、域名解析、时间同步请点击 阿里云开源镜像站
VS中有一键编译+自动运行,Linux也给我们提供了对应的编译方式,虽然不及VS那么便捷,但是相比于手动输入 gcc -o add add.c ,我们一句make就可以搞定
Makefile是一个文件,能够存放上述 gcc -o add add.c 这种编译指令
make是一个命令工具,能够解释Makefile中的指令
要如何编译.c文件,关键就在于Makefile是怎么写的,下面我们主要介绍这两者的使用
假设我们要编译这么一个test.c文件,我们希望编译生成一个名为test的可执行文件

我们在test.c所在目录下创建一个Makefile文件,这里有两种编译写法
先一步步向下分析,需要什么依赖文件,然后再一步步生成

编写好以后,我们只需要在命令行输入make,系统就会帮我们自动编译了,同时会生成每一步产生的文件按

Makefile中要写的内容如下

第一行:确定好依赖文件和目标文件。也就是要用依赖文件来生成目标文件
第二行:编译指令。
$@ 指向第一行的目标文件,表示目标文件test
$^ 指向第一行的依赖文件,表示依赖文件test.c
-std 表示采用的C++标准
接下来我们只需要在命令行输入make,系统就会帮我们编译了,编译成功以后,当前目录下就会多出一个test 执行文件


我们每次开始编译之前,我们最好先清理一下之前生成的执行文件,手动输入 rm test 有点太麻烦了,Makefile只要写入下面的内容,就会自动帮我们清理了

如果我们还希望移除生成的.o 、.s、.i文件,那么第6行只要换成
rm -f test test.o test.s test.i
一般我们make的时候,系统会自动调用,当然也可以手动调用,如


我们会发现之前的test执行文件不见了
现在我们有三个文件,分别是test.c、sub.c、sub.h,而且我们要在test.c中调用sub.h中的函数

Makefile中的内容如下:

test执行文件 要依赖 多个文件生成的 .o文件,现在没有 .o文件,所以需要重新生成 .o文件
当前路径下有多个.c文件,我们逐个去写的话,就是
test.o:test.c
gcc -c $@ $^
sub.o:sub.c
gcc -c $@ $^
但是这样写太复杂了,我们可以选择下面这种写法
%.o: %.c
gcc -c $<
%.o:表示目标文件是 .o文件
%.c:表示依赖文件是当前路径下的 .c文件,可以看作是一个集合中放着 test.c sub.c
$< : 展开%.c ,逐个生成对应的 .o文件,比如test.c就会生成对应的test.o、sub.c就会生成对应的
sub.o
现在我们来运行一下


现在我们有三个文件,test.c、sub.h、sub.c,但是其中sub.h、sub.c在其目录func_dir 下


Makefile的内容如下:

现在我们来运行一下试试


=常规写法尝试=
上面的都是一个main函数文件 + 一堆函数文件的编译,但是有的时候,比如不同进程间通信时,我们可能需要一次生成两个运行文件,如果我们按照常规的思路来写,会怎么样?


测试结果如下,我们发现只生成了一个运行文件,很显然无法按照常规的写法来写

=原因分析=
Makefile自动构建结束会生成运行文件,默认只生成最开始的一个,我们写的时候,server的生成放在client的前面,server就是最开始的哪一个,所以Makefile就只生成了 server
Makefile既然生成server以后,就不会继续生成下一个运行文件,那么我们就要在这之前就告诉Makefile,我希望生成两个运行文件(因为Makefile是自顶向下运行的,不会上来就去执行gcc指令)

然后我们再来看一下测试结果,现在就能一次生成两个运行文件了

本文转自:https://blog.csdn.net/challenglistic/article/details/124249349
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功