- 浏览: 108231 次
- 性别:
- 来自: 上海
-
最新评论
-
marx:
marx 写道make: *** No targets spe ...
php 性能分析工具xhprof使用手册 -
marx:
make: *** No targets specified ...
php 性能分析工具xhprof使用手册
译者自述:
最开始接触开源软件时,觉得make很神秘,打开makefile,更加深了这种感觉。好在上学时不需要写大型程序,并且C/C++基本只在VC6 下写过,所以一直没有勇气和动力来弄。工作后,尝试使用vim/vimgdb,在里面用gcc很不方面,还是将其写入makefile,直接输入个 make命令来的简单。上网查了下,makefile入门也不是很难,找了很多文章,属这个简单,甚喜。独乐乐不如众乐乐,况翻译一遍能加深印象,故有此 文。
书写长长的编译命令是很枯燥无聊而又费时的,尤其是包含多个文件的编译命令。令人高兴的是这种人们必须在命令行中敲入编译的命令的时代已经结束了, 因为我们将使用makefie,在make工具的帮助下实现自动化编译。Makefiles是遵循make工具可以识别的语法规则编写的文件,可以看作是 make的脚本程序。此文中将用到下面这些文件:
我建议您将这些文件放到一个单独的文件夹中来使用。
备注:文中我使用了g++。您可以使用任意的编译器来代替文中的g++。
make工具的使用
如果您在命令行中执行
make
那么make工具将在当前目录中查找是否有名为“makefile ”的文件并执行。如果您有多个makefiles文件,那么您可以使用-f参数来指定将要执行的makefile:
make -f mymakefile
make还有一些其它的参数,若需更多信息,请man make
Build过程
- 编译器将源文件编译成object文件
- 连接器将object文件链接成可执行文件
手动编译
命令行中直接调用编译器/连接器来的方式:
g++ main.cpp hello.cpp factorial.cpp -o hello
Makefile基本结构
Makefile的基本结构包括:
target: dependencies
[tab] system command
按照这种格式,我们的makefile可以写成这样:
all:
g++ main.cpp hell.cpp factorial.cpp -o hello
[Download here ]
若执行这个makefile,在命令行中输入:
make -f Makefile-1
在第一个例子中,我们定义了一个名为all的target。这是Makefile的默认target,如果没有指定其它target的话,make 将会执行这个target。在这里,target all没有指定dependencies,所以make就直接执行g++命令了。
使用依赖
很多时候使用多个target是很有好处的。如果你仅仅是 修改了工程中的一个文件,那么make只需修改那个文件相关的target,而不需要将工程中的文件全部重新编译一遍。
下面是使用多个target的Makefile:
all: hello
hello: main.o factorial.o hello.o
g++ main.o factorial.o hello.o -o hello
main.o: main.cpp
g++ -c main.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
hello.o: hello.cpp
g++ -c hello.cpp
clean:
rm -rf *.o hello
[Download here ]
在这里,target all 只有一个dependencies,没有系统命令。make会首先满足all的依赖,方法是搜索依赖的target,并执行。依赖的target也许有自 己的依赖和命令,那么这个过程递归进行,知道所有的依赖都得到满足。在这个例子中,我们看到有个名为clean的target。这个一般都是用于清理所有 的objects和可执行文件。
使用变量和注释
在Makefile中,您也可以定义和使用变量。当需要批量修改编译器参数时,使用变量是很方便的。
#I am a comment, and I want to say that the variable CC will be
#the compiler to use
CC=g++
#Hey! I am comment nuber 2, I want to say that CFLAGS wiil be the
#options I'll pass to the compiler
CFLAGS=-c -Wall
all: hello
hello: main.o factorial.o hello.o
$(CC) main.o factorial.o hello.o -o hello
main.o: main.cpp
$(CC) $(CFLAGS) main.cpp
factorial.o: factorial.cpp
$(CC) $(CFLAGS) factorial.cpp
hello.o: hello.cpp
$(CC) $(CFLAGS) hello.cpp
clean:
rm -rf *.o hello
[Download here ]
正如上面所示,变量是十分有用的。定义和使用变量的方式很简单,在写target之前将一个值赋给一个变量即可完成定义,使用$(VAR)可以获得变量值。
Where to go from here
With this brief introduction to Makefiles, you can create some very sophisticated mechanism for compiling your projects. However, this is just a tip of the iceberg. I don't expect anyone to fully understand the example presented below without having consulted some Make documentation (which I had to do myself) or read pages 347 to 354 of your Unix book.
CC=g++ CFLAGS=-c -Wall LDFLAGS= SOURCES=main.cpp hello.cpp factorial.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=hello all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $< -o $@
[Download here ]
If you understand this last example, you could adapt it to your own personal projects changing only 2 lines, no matter how many additional files you have !!!.
下一步的学习
完成文中的例子后,您已经可以写一个基本的makefile了。然而,这里的东西仅仅是冰山一角,我没指望所有人都能在不查Make documentation 的情况下完全理解下面的代码(即使我自个儿也得查了才明白)。
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES: .cpp =.o)
EXECUTABLE=hello
all: $(SOURCES): $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -O $@
[Download here ]
如果您能理解这段代码,那么无论您的工程含多少个文件,只需修改其中两行这个makefile便可用于您的工程。
发表评论
-
Discuz插件编写教程
2013-10-21 15:23 2193Discuz插件编写教程: 1, ... -
Android
2012-12-25 13:48 9681. 请描述下 Activity ... -
c++ socket 消息构建
2012-10-10 11:14 989客户端 : /* client.c 向 ... -
linux 消息队列 实例
2012-09-25 11:42 1151前言: 消息队列就是一个消息的链表。可以把消息 ... -
Linux 信号signal处理机制
2012-09-24 15:55 956信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的 ... -
C++ TinyXml操作(含源码下载)
2012-09-24 15:18 1071前言 TinyXML是一个 ... -
linux下C与C++混合编程
2012-09-21 10:36 1765首先,混合编程不是指在同一个文件里写C与C++。 比如说想 ... -
Linux 下编译C程序
2012-09-20 11:58 3187GCC 已不再是主要针对GNU项目自身的软件的小型 C ... -
VS2010快捷键
2012-09-10 15:30 834VS2010快捷键 有人发了VS2 ... -
mysql 备份
2011-06-10 16:15 5041,直接将MySQL数据库压缩备份,不能在mysql模式下使用 ... -
Apache 虚拟机简单配置
2011-03-24 11:57 4926Apache 虚拟机简单配置 配置虚拟机主要是基于主机 ... -
svn的使用
2011-03-17 16:10 10841,svn中有几个重要的概念:branche,tag,trun ... -
社交网页游戏解析之产品篇
2010-06-03 15:20 1033转载 ... -
常见手机参数含义
2010-05-18 14:45 11741,屏幕大小:如3.5英寸,它是指手机屏幕对角线的长度。 ... -
Memcache的使用和协议分析详解
2009-08-13 15:44 916作者:heiy ... -
CS vs BS
2009-08-07 09:12 1748C/S又称Client/Serv ... -
优秀网站源码、编程源码下载网站大集中
2009-08-06 17:41 1005优秀网站源码、编程源码下载网站大集中 1.51源码:ht ...
相关推荐
【转载】跟我一起写Makefile,写makefile的教程,可以快速上手写出makefile
通常,这类文章会包含项目的简介、主要特性、实现技术、使用教程以及开发者对项目的见解和经验分享。为了深入理解这个项目,我们需要访问链接来获取更多详细信息。 【标签】:“源码”和“工具”这两个标签暗示了...
内容概要:本文详细介绍了利用Matlab、YALMIP和CPLEX实现微电网两阶段鲁棒优化经济调度的方法。首先,主问题部分通过定义决策变量如机组出力、储能充放电状态等,建立目标函数以最小化总成本,并设置相应的约束条件。接着,子问题部分模拟最恶劣场景,通过引入不确定性和惩罚系数,最大化系统成本,从而找到系统的薄弱环节。两者通过列与约束生成算法(CCG)进行迭代优化,直至达到收敛条件。文中还提供了多个实战避坑指南,如变量维度对齐、CPLEX参数调优以及不确定性集合的选择等。 适合人群:从事电力系统优化研究的专业人士,尤其是对微电网调度感兴趣的工程师和技术研究人员。 使用场景及目标:适用于需要确保微电网在面对极端天气或其他不确定性因素时仍能稳定运行的情况。主要目标是在保障系统可靠性的前提下,降低运营成本,提高经济效益。 其他说明:文章不仅提供了详细的代码实现步骤,还包括了许多实用的经验分享和技巧提示,帮助读者更好地理解和应用两阶段鲁棒优化方法。此外,还强调了在实际应用中应注意的问题,如避免过度保守、合理设定不确定集参数等。
内容概要:本文介绍了H6逆变器拓扑结构及其离网和并网仿真模型的特点。H6逆变器采用六开关器件设计,支持非单位功率因数负载、功率因数调节、共模电流抑制等功能。文中详细讨论了PR单环控制策略、锁相环(SOGI-PLL)、LC和LCL滤波器的应用,并提供了相关代码示例。此外,文章还探讨了仿真环境设置以及常见调试技巧,验证了H6逆变器在不同负载条件下的优越性能。 适合人群:从事电力电子、逆变器设计与仿真的工程师和技术研究人员。 使用场景及目标:①理解和掌握H6逆变器的工作原理和控制策略;②优化逆变器的设计参数,提高其在离网和并网场景中的性能;③通过仿真验证设计方案的有效性和可靠性。 其他说明:本文提供了丰富的代码片段和调试经验分享,有助于读者快速上手H6逆变器的实际应用。
内容概要:本文详细介绍了松下FP-X系列PLC在空调冷冻泵模拟量控制中的应用,特别是AFPX-TC2模拟量输入模块和AFPX-DA2模拟量输出模块的使用方法。文章涵盖了硬件连接、手动控制程序、自动控制程序以及模式切换逻辑的设计。通过这些模块和程序,可以实现对冷冻泵转速的手动和自动控制,确保系统的稳定性和高效性。文中还提供了详细的代码示例和调试技巧,如PID参数调整、信号量程转换、无扰动模式切换等。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉PLC编程和模拟量控制的人士。 使用场景及目标:适用于需要对空调冷冻泵进行精确控制的工程项目,旨在提高系统的响应速度和稳定性,减少人工干预,提升工作效率。 其他说明:文章不仅提供了理论指导,还包括了许多实用的经验和注意事项,如硬件接线细节、常见问题解决方法等,有助于读者快速掌握并应用于实际项目中。
内容概要:本文详细介绍了如何利用COMSOL软件在光子晶体超表面中实现偏离Gamma点的BICs(连续谱中的束缚态)合并。首先,作者通过设置偏离Gamma点的波矢,调整晶格参数如孔半径和晶格常数,成功实现了BICs的合并。接着,作者分享了多个实用技巧,如正确设置周期性边界条件、使用六重旋转对称条件以及优化网格划分方法。此外,文中提供了详细的MATLAB和COMSOL代码片段,帮助读者理解和复现实验结果。最后,作者强调了磁场涡旋对于识别BICs的重要性,并讨论了BICs合并过程中的一些反直觉现象及其背后的物理机制。 适合人群:从事光子晶体超表面研究的科研人员和技术爱好者,尤其是那些希望深入了解BICs合并机制并对COMSOL有一定基础的读者。 使用场景及目标:① 使用COMSOL进行光子晶体超表面的数值模拟;② 实现偏离Gamma点的BICs合并;③ 优化仿真参数以提高Q值和模式稳定性;④ 理解BICs合并的物理机制及其应用前景。 其他说明:本文不仅提供了理论指导,还附带了大量的实际操作步骤和代码示例,使读者能够快速上手并在实践中不断优化自己的模型。同时,作者提醒了一些常见的错误和注意事项,有助于避免不必要的调试时间。
分享一些R包,用于GBD数据库BAPC分析
内容概要:本文档详细介绍了A10 ACOS v4平台上的VRRP-A(高级虚拟路由器冗余协议)配置方法及其工作机制。VRRP-A旨在提高网络的高可用性和冗余度,支持多达八个ACOS设备作为IP互备份,适用于网关(路由)模式及单臂模式部署。文档涵盖了VRRP-A的基本概念、配置流程、主备选举机制、故障切换逻辑、浮动IP管理、配置同步、会话同步以及接口配置等内容。此外,还提供了具体的配置示例和故障切换策略模板的创建方法,以帮助管理员更好地理解和应用VRRP-A。 适合人群:具备一定网络基础知识,尤其是熟悉ACOS平台的网络管理员和工程师。 使用场景及目标:①实现多台ACOS设备之间的冗余备份,确保网络服务的连续性和稳定性;②通过配置浮动IP、主备选举、故障切换策略等,提升网络的高可用性;③利用配置同步和会话同步功能,简化管理和维护工作。 其他说明:本文档不仅提供了详细的配置指南,还通过具体示例展示了各种配置的实际操作步骤,帮助用户快速掌握VRRP-A的配置和优化技巧。此外,文档强调了VRRP-A与传统VRRP的区别,指出两者不可互操作,因此在实际部署中需要注意选择合适的协议。
内容概要:本文详细介绍了如何利用OpenSEES平台建立单柱墩模型,并深入探讨了钢筋与混凝土之间的滑移粘接及其捏缩效应。主要内容涵盖模型初始化、节点定义、边界条件设定、材料和截面定义、单元创建以及基于位移控制的滞回分析。文中提供了完整的建模过程和相关源代码,帮助读者理解并实现这一复杂结构的数值模拟。 适合人群:从事结构工程、土木工程及相关领域的研究人员和技术人员,特别是那些对钢筋混凝土结构的非线性行为感兴趣的学者。 使用场景及目标:适用于桥梁、建筑等基础设施的设计和评估,旨在提高结构在地震等极端荷载下的安全性和耐久性。通过模拟钢筋与混凝土间的粘接滑移现象,优化结构设计,增强抗震能力。 其他说明:文章不仅提供了理论背景,还包括大量实用的代码示例和实践经验分享,有助于读者快速掌握OpenSEES平台的应用技巧。同时,针对可能出现的问题给出了具体的解决方案,如收敛困难时的处理方法等。
黔轻职院团字〔2025〕5号关于开展2025年大学生社区实践计划工作的通知.zip
内容概要:本文详细介绍了基于Matlab/Simulink构建的100kW光伏发电三相并网系统的建模与仿真。系统主要包括100kW光伏模块及其MPPT控制、两级式并网逆变器(boost电路和三相桥式逆变)、复杂的控制策略(坐标变换、锁相环、dq功率控制、解耦控制、电流内环电压外环控制、SPWM调制)以及LC滤波器。文中不仅提供了详细的理论背景和技术实现方法,还展示了具体的仿真结果,验证了系统的性能。主要内容涵盖MPPT控制算法、逆变器拓扑结构、控制策略的设计与实现、LC滤波器的作用及效果评估。 适合人群:从事电力电子、新能源发电、控制系统设计的研究人员和工程师,特别是对光伏发电并网系统感兴趣的读者。 使用场景及目标:适用于希望深入了解光伏发电并网系统工作原理和控制策略的技术人员。目标是掌握如何利用Matlab/Simulink进行光伏发电系统的建模与仿真,提高系统的发电效率和稳定性。 其他说明:文章强调了各个组件之间的协同工作对于系统整体性能的影响,并提供了大量实用的代码片段和调试技巧,有助于读者更好地理解和应用所学知识。
内容概要:本文详细介绍了电导增量法(INC)在光伏发电系统中的最大功率点跟踪(MPPT)算法。首先解释了INC算法的核心逻辑,即通过电导变化量判断爬山方向,并讨论了关键参数如阈值、步长的选择及其对系统稳定性的影响。接着探讨了PWM调制的具体实现方式,强调了V_pv_max的实时获取重要性和自适应步长策略的应用。此外,还分享了一些实用的仿真技巧,如加入噪声处理、动态调整I-V曲线以及使用卡尔曼滤波提高跟踪精度。最后,通过实验数据验证了改进后的INC算法在不同光照条件下的优越性能。 适合人群:从事光伏系统研究与开发的技术人员,尤其是对MPPT算法感兴趣的工程师。 使用场景及目标:适用于需要深入了解和优化光伏系统MPPT算法的研究和开发工作,旨在提升光伏系统的能量转换效率。 其他说明:文中提供了大量代码片段和实践经验,帮助读者更好地理解和应用电导增量法。同时提醒读者关注一些常见的陷阱和技术细节,确保仿真的准确性和可靠性。
内容概要:本文详细介绍了裂缝检测中的数据标注方法,涵盖了目标检测和语义分割两大主要技术。对于目标检测部分,重点讲解了YOLO算法的数据标注流程,包括工具选择、标注操作以及保存格式。而对于语义分割,则深入探讨了像素级标注的具体步骤,涉及多边形绘制、掩码图像生成及其优化处理。此外,还分享了一些实战经验和技巧,如如何应对复杂裂缝形态、提高标注精度的方法等。 适合人群:从事计算机视觉领域的研究人员和技术人员,尤其是专注于物体检测和图像分割方向的专业人士。 使用场景及目标:①帮助开发者掌握裂缝检测数据标注的基本技能;②提供实用的操作指南,解决实际工作中遇到的各种难题;③为构建高效准确的裂缝检测模型奠定坚实的数据基础。 其他说明:文中不仅包含了理论知识,还附带了许多具体的代码实例,有助于读者更好地理解和应用相关技术。
内容概要:本文详细介绍了半车悬架主动控制系统中MPC(模型预测控制)的应用及其调参技巧。首先解释了MPC的基本概念,即通过优化未来一段时间内的性能指标来确定当前时刻的最佳控制输入。接着展示了具体的实现步骤,包括建立状态空间模型、定义性能指标函数和采用优化算法进行求解。文中特别强调了参数调优的经验,如预测时域和控制时域的选择、权重矩阵的设计以及约束条件的设置。此外,作者还分享了一些调试细节,例如QP求解器的选项设置和作动器延迟补偿的方法。最终的效果表明,MPC能够显著提高乘坐舒适性和操控稳定性。 适合人群:从事车辆工程、自动化控制领域的研究人员和技术人员,尤其是对悬架系统和MPC感兴趣的读者。 使用场景及目标:适用于需要提升汽车行驶品质的研究项目或产品开发,旨在通过先进的控制算法改善车辆的动态性能。 其他说明:文章提供了丰富的代码片段和实践经验,有助于读者更好地理解和应用MPC技术。同时提醒读者注意参数之间的相互影响,确保系统稳定可靠地运行。
内容概要:本文详细介绍了利用Simulink模型进行高频注入以实现电机电角度精确观测的方法和技术细节。首先,通过在d轴注入特定频率的正弦波电压信号,使高频信号与转子位置产生相互作用,从而携带角度信息。其次,采用低通和带通滤波器组合对信号进行处理,分别去除高频成分并提取有用的调制信号。最后,通过锁相环结构解调相位差,得到最终的角度估计。文中还讨论了不同频率选择的影响以及启动阶段的扫频注入优化方法,并分享了一些实际应用中的经验和注意事项。 适合人群:从事电机控制系统研究与开发的专业技术人员,特别是对无位置传感器控制感兴趣的工程师。 使用场景及目标:适用于需要提高电机控制精度的应用场合,特别是在低速条件下无法使用传统位置传感器的情况下。目标是通过高频注入技术实现对电机转子位置的高精度测量,进而提升整个系统的性能。 其他说明:文中提供了大量MATLAB/Simulink代码片段作为示例,帮助读者更好地理解和实现相关算法。同时强调了实际工程实践中可能遇到的问题及其解决方案,如信噪比优化、硬件干扰排除等。
1、文件说明: Centos8操作系统texlive-csquotes-7:20180414-23.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf texlive-csquotes-7:20180414-23.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细介绍了风光储并网协同运行模型中的关键技术——双闭环控制策略和单极调制方法。双闭环控制策略由电流内环和电压外环构成,分别用于快速跟踪电流指令和维持输出电压稳定,确保并网电能质量。单极调制作为一种PWM技术,能够降低开关损耗,提高系统效率。文中还提供了具体的MATLAB代码示例和Simulink建模步骤,展示了如何在仿真环境中实现和优化这些控制策略。 适合人群:对风光储并网系统感兴趣的科研人员、工程师和技术爱好者。 使用场景及目标:适用于希望深入了解风光储并网系统控制机制的研究者,旨在帮助他们掌握双闭环控制和单极调制的具体实现方法,从而应用于实际项目中,提高系统的稳定性和效率。 其他说明:文章不仅提供了理论解释,还包括了详细的代码示例和仿真指导,使读者能够在实践中加深理解。此外,文中还分享了一些实用的调试技巧和注意事项,如避免过冲、设置死区时间和选择合适的仿真求解器等。
内容概要:本文详细介绍了基于S7-200 Smart PLC的速度与频率同步控制程序,主要用于卷板材生产线和造纸设备。程序通过设置速度同步地址vw10作为基准,利用频率调整系数factor[i]实现1-15回路的频率同步。此外,还支持主从单机微调功能,确保各回路能够精确同步。文中提供了具体的代码示例,解释了如何通过简单逻辑实现多机同步,并强调了微调和异常检测的重要性。对于16-30回路,考虑到设备布局和负载差异,提出了相应的优化建议,如地址映射调整和滤波算法的应用。 适合人群:从事自动化控制系统开发的技术人员,尤其是熟悉PLC编程和变频器应用的专业人士。 使用场景及目标:①帮助技术人员理解和掌握S7-200 Smart PLC在卷板材生产线和造纸设备中的速度与频率同步控制方法;②提供实用的代码示例和技术细节,便于快速部署和调试;③提高生产线的稳定性和效率,降低故障发生率。 其他说明:本文不仅涵盖了基本的同步控制逻辑,还包括了许多实际应用中的经验和技巧,如微调处理、异常检测和滤波算法等,有助于解决实际工程中的常见问题。
内容概要:本文详细介绍了将EBSD(电子背散射衍射)数据转换为有限元inp格式文件的方法和技术细节。首先解释了EBSD数据的重要性和有限元分析的作用,随后通过Python编程展示了完整的转换流程,包括数据读取、处理、节点生成、材料方向赋值以及最终生成inp文件。文中不仅提供了具体的代码示例,还讨论了常见的挑战及其解决办法,如坐标对齐、网格拓扑构建、材料方向赋值等。此外,作者分享了一些实践经验,强调了注意事项,如确保单位一致性和格式准确性。 适合人群:从事材料科学研究的专业人士,尤其是那些需要将微观材料特性应用于宏观有限元模拟的工程师和科学家。 使用场景及目标:适用于需要将EBSD数据用于有限元分析的研究项目,旨在提高材料模拟的精度和可靠性。主要目标是帮助研究人员掌握如何利用编程手段高效地将EBSD数据转化为可用于有限元分析的inp文件。 其他说明:文中提到的技术和方法不仅可以应用于二维数据,也可以扩展到三维情况,尽管后者涉及更多复杂性。同时,文中提供的代码片段可以直接用于实际工作中,但可能需要根据具体情况调整参数设置。
matlab-PSO调谐模糊逻辑基于电源系统的智能负载频率控制