|
***************************************************************************************************************************
整理的一些makefile问题:
.PHONY (假想目标):它可以改善同名的目标,通常用于一些外部命令,如果没有定义为假象目标,那么它就会认为你
所定义的目标已经式最新的了,所以它肯定不会执行,必须定已为假象目标。
discussion:
也就是说你所定义的虚拟目标如果要执行必须打入make 虚拟目标名
如果用到假象目标即特殊目标其格式如下:
假象目标:虚拟目标
虚拟目标:
命令
用了假象目标的好处就是以后执行make命令他会总是更新虚拟目标,而不管其是否已经最新
********************************************************************************************************(关于假象目标的问题)
***************************************************************************************************************************
知道在makefile中| 和 < ,>的意思?是否是想在unix中一样|代表是pipe的意思,而<,>为重定位?
而在tornado的参考资料中查找到
Simple Constraints question:
<内存操作数地址的自减
>内存操作数地址的自增
原文:
`<'
A memory operand with autodecrement addressing (either predecrement or postdecrement) is allowed.
`>'
A memory operand with autoincrement addressing (either preincrement or postincrement) is allowed
实例:
$(CC) -M -MG $(CFLAGS) $(wildcard *.[c] $(CONFIG_ALL)/*.[c]) > $@
#cc=gcc
#这句话是我从制作自动生成依赖文件中提出来的即depend.xxxx(xxxx表示任何名字)
#-M和$(wildcard)函数是为了把所有的.c所依赖的文件给扩展并自动生成依赖文件
#$@的作用是第一个目标
#那么>$@所在的整句话的意思是什么呢?
<,>以及|到底什么意思呢?
***********************************************************************************************************("| ,< ,>"的用法)
***************************************************************************************************************************
override variable = value
override variable := value
override variable += value
override define variable
看到makefile中这种定义,它代表什么意思呢?
*****************************************************************************************(其中定义时,override是什么意思?)
***************************************************************************************************************************
ifneg(arg1,arg2)
判断语句,判断参数arg1和arg2是否不同,如果不同则执行相关语句,起执行语句为:
ifneg(arg1,arg2)
//word;
else
//word;
endif
else #可以这样定义,在endif之后还可以else?有什么用呢?有这个必要吗?
//word;
endif
*************************************************************************************************************** (ifneg语法)
***************************************************************************************************************************
比如有两个文件makefile和aa文件,makefile中定义了个变量比如为a=path,且在makefile的内容如下:
#makefile
a=path
include aa
.......
#aa
a=path //有这个必要吗?
ifneg(a,)
.......
在aa文件中也需要用到a这个变量,那么还需要在aa中定义吗?可以直接从makefile这个文件中调用吗?
这个问题就是关于在makefile中定义了多次变量所产生的后果,且是同一个变量,那么如果有执行语句
它是应该执行先前定义的变量还是之后定义的变量呢?别如说
GCC=gcc
cfile:cfile.c
GCC -o cfile.o cfile.c
GCC=g++
那么它是调用gcc还是后者g++呢,这里虽然用前后者都无所谓,但我们讨论的不是执行结果,而是变量的
调用次序,另外也从中提出了,makefile在调用变量时是用何种策略的。其次,makefile可以用include调用
多个文件,那么文件中定义了同样的变量,makefile又是如何去选择变量引用的呢?
*********************************************************************************************** *************(变量调用问题)
***************************************************************************************************************************
ifeq ($(LIBNAME),)
LIBNAME = lib$(CPU)$(TOOL)vx.a
endif
***********************************************************(条件结构混乱的疑问:变量未声明然后判断,执行结果又是变量的定义)
***************************************************************************************************************************
在makefile中的变量有没有区分大小写?
******************************************************************************************************(关于区分大小写的问题)
***************************************************************************************************************************
vxrm命令是在tornado下的命令,是什么指令?
应该是删除指令,就像linux下的rm命令一样,但它与rm指令有何区别?
******************************************************************************************************************(命令vxrm)
***************************************************************************************************************************
在makefile中有循环语句伐?
instance:
docs:
@echo Processing
@for %f in (sysLib sysTffs tyCoDrv) do @if exist %f.c @echo %f.c & \#其中的for...in ....do???
$(CPP) $(CASFLAGS) -C $(DOCFLAGS) %f.c > %f.i & \
$(REFGEN) -mg -book BSP_Reference -chapter $(TARGET_DIR) \
-out $(DOC_DIR)\$(TARGET_DIR) %f.i & \
$(RM) %f.i & \
$(HTMLLINK) $(DOCS_ROOT)/vxworks/bsp/$(TARGET_DIR)
the for ... in ... do in instance whether loop?
我在makefile文档中没有查到相关的资料,其中的condition只有if相关的条件语句,该实例选自tornado中的ads8260
makefile调用h/make/下的文档
**************************************************************************************************************(makefile疑问)
不知谁对tornado,vxwork熟悉,以及makefile熟悉,能否将其学习资料,以及学习心得拿出来让我们一起探讨技术问题
以及好的网站,好的资料下载站点,论坛等。愿我们一同进步!
如果谁愿意与我一起讨论相关问题,请email给我,[email protected]
MAKEFILE之共同进步! |
|