首页 文章 精选 留言 我的

精选列表

搜索[通用人工智能],共10000篇文章
优秀的个人博客,低调大师

Makefile 实际用例分析(一) ------- 比较通用的一种架构

这里不再说Makefile的基本知识,如果需要学习,那么请参考:下载:makefile 中文手册 或者 点击打开链接 或者 跟我一起写Makefile( 陈皓 ) 这里说的是一般的实际的一个工程应该怎么去写。 环境:ubuntu 10.04 先看看我的文件的分布情况: 顶层: 然后src中:是所有的源程序以及头文件( 我这里是使用自己的IR树的代码作为实验 ) 而build文件夹是为了编译使用的!下面有: obj文件夹里面放的是编译过程中的.o和.d文件,还有一个subdir.mk的子文件, 用于指示怎么生成.o obj中: 下面我们从顶层开始慢慢分析: *******温馨提示:下面的注释是为了方便处理,写在每一条语句后面,其实这样的风格是不好的,所以,如果 你使用了这个makefile,请将注释换行...或者去掉,否则可能编译异常!谢谢记住! ******* 最外层的makefile: [plain] view plain copy print? SHELL=/bin/sh#这个地方是指示使用的shell是sh EXEC=ir_tree#最终生成的binary的名称 BUILD_DIR=build#这个子文件夹,此处也就是我们build文件夹 all:#all在此处是终极目标,这个你应该知道的。一般我们make的时候,第一个目标作为终极目标 @(cd${BUILD_DIR};make)#这句是进去build文件夹去执行那个makefile clean:#clean就不说了 @echo'startclean...' @($(RM)$(EXEC)) @(cd${BUILD_DIR};makeclean) @echo'Finished!' @echo'' 现在进入build文件夹,看这个文件夹下面的makefile [plain] view plain copy print? SHELL=/bin/sh#同上 INCLUDE_DIR:=#include文件夹,一般我们在引用库的时候,需要将其头文件放在一个include中,然后自己的程序#编译的时候需要包含这个include,例如-I$(<spanstyle="font-family:SimHei;">INCLUDE_DIR</span><spanstyle="font-family:SimHei;">)</span> LIB_DIR:=-lm#引入的库 EXEC=../ir_tree#这是一个最终binary名称,这里是将这个可执行放在了上层文件夹中 -includeobj/subdir.mk#这个地方是include了一个子文件 #这里子文件作用是,为了生成所有的.o文件(当然附带生成.d文件!),生成.o之后,才能回到这一#层的makefile进行链接成最终的可执行的操作!具体操作我们稍后再看 all:${EXEC}#好!这里是这个makefile的第一个目标。即终极目标,所有需要找<spanstyle="font-family:SimHei;">${EXEC}的生成规则!</span> ${EXEC}:${OBJS}#<spanstyle="font-family:SimHei;">${EXEC}的生成规则,注意这里我们没有看到$(OBJS),那是因为在</span><spanstyle="font-family:SimHei;">obj/subdir.mk中!</span><spanstyle="font-family:SimHei;"> </span>@echo'Buildingtarget:$@' gcc-o$@$(OBJS)$(LIB_DIR)#这一句就是为了将所有的.o文件+引用的库链接起来,生成最后的$@,也就是$(EX#EC),也就是最后的binary! @echo'Finishedbuildingtarget:$@' @echo'' clean: @echo'startrmobjsanddeps...' $(RM)$(OBJS)\ $(C_DEPS) @echo'Finishrmobjsanddeps...' .PHONY:allclean#伪目标 .SECONDARY: 下面需要看看obj中的subdir.mk的内容了!这个是为了生成所有的.o文件。 同时!请注意:当我们的一个.c或者.h被修改之后,需要重新编译!这一点非常重要! 特别是.h被修改的时候,不能忘记重新编译( 当然,有些时候.h修改,我们不需要编译,这个先暂时不说,后面在讨论!其实,你使用一个make --touch就可以~ ) [plain] view plain copy print? C_SRCS+=\#所有的.c文件,当然你喜欢使用wildcard也是可的! ../src/card.c\#$(<spanstyle="font-family:SimHei;">wildcard../src/*.c</span><spanstyle="font-family:SimHei;">)</span> ../src/index.c\ ../src/node.c\ ../src/rect.c\ ../src/split_l.c\ ../src/test.c OBJS+=\<spanstyle="font-family:SimHei;">#所有的.c文件,当然你喜欢使用wildcard也是可的!</span> ./obj/card.o\#OBJS=$(patsubst%.c,%.o,$(wildcard../src/*.c)) ./obj/index.o\#但是你要将src文件目录改成obj的<spanstyle="font-family:SimHei;">OBJS:=$(addprefix"./obj/",$(notdir$(OBJS)))</span> ./obj/node.o\ ./obj/rect.o\ ./obj/split_l.o\ ./obj/test.o C_DEPS+=\#deps ./obj/card.d\ ./obj/index.d\ ./obj/node.d\ ./obj/rect.d\ ./obj/split_l.d\ ./obj/test.d all:$(OBJS)#注意在这个subdir中,这个是终极目标,也就是所有的objs obj/%.o:../src/%.c./obj/%.d#这里是o文件的依赖规则:注意是.c和.d同时成为依赖,.d文件中是一个目标的所有的依赖文#件,包括.c和.h文件,所有一旦.h被修改,这个地方也是可以识别的! @echo'startbuilding$<...' gcc-O3-Wall-c-fmessage-length=0-MMD-MP-MF"$(@:%.o=%.d)"\ -MT"$(@:%.o=%.d)"-o"$@""$<" @echo'Finishedbuilding:$<' @echo'' -include$(C_DEPS)#注意:这里将所有的.d文件引入!注意,第一次引入时候,没有.d文件,会寻找.d的生成规则,也就是下面#的,这个.d又是依赖.c文件的,所有,一旦一个.c文件中多了一个头文件之类,又可以跟新.d,从而,执行#上面的.o生成时候,就能够实时跟新 ./obj/%.d:../src/%.c#注意:这里为了生成.d @echo'startbuilding$(notdir$@)...' $(CC)$<$(INCLUDE)-MM-MD-o$@ 好了,上面所有的都分析完了,然后可以make一下,.、ir_tree 看看效果吧~ 如果你要下载这个工程,我已经上传了,你可以免费下载:ir_tree from:http://blog.csdn.net/shanshanpt/article/details/17198413

优秀的个人博客,低调大师

阿里云系列——7.阿里云IIS系列详解(过程+通用+最新)

网站部署之~阿里云系列汇总http://www.cnblogs.com/dunitian/p/4958462.html 先讲IIS系列,Linux部署以后再继续讲 先打开主机管理平台,确认域名绑定 2.net版本设置一下 3.数据库创建(两种方法:1,平台,2,SQLServer远程连接) http://dms-net.aliyun.com/ 用户名之类的看主机管理页面的显示 数据库远程连接:(出错就查看这个:http://www.cnblogs.com/dunitian/p/4982734.html) 4.网站发布后上传ftp服务器 详细见:http://www.cnblogs.com/dunitian/p/4982740.html 5.没问题后打开网站==>发现。。。。。。。。。。尼玛,over了? 6.先把远程调试开下来(记得把webConfig里面数据库连接改一下) 7.学方法:==>找不到文件 ,那就可能阿里IIS里面木有这东西 8.少这个我就把这个拉到ftp的bin目录去(怎么拉?看9~11) 9.再访问,靠,还不行? 10.再来啊~ 11.右击属性 12.复制到ftp的bin目录下 13.无力吐槽,阿里云内置的也太少了吧。。。。。。。。难道是版本太高? 14.再来啊 用ef的如果出错了看这个:http://www.cnblogs.com/dunitian/p/4982757.html

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册