解释这个makefile,这是一部分,我知道这是一个eclipse的工程,解释5到35行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解释这个makefile,这是一部分,我知道这是一个eclipse的工程,解释5到35行相关的知识,希望对你有一定的参考价值。

1
2 # Automatically-generated file. Do not edit!
5 -include ../makefile.init
6
7 RM := rm -rf
8
9 # All of the sources participating in the build are defined here
10 -include sources.mk
11 -include subdir.mk
12 -include objects.mk
13
14 ifneq ($(MAKECMDGOALS),clean)
15 ifneq ($(strip $(C++_DEPS)),)
16 -include $(C++_DEPS)
17 endif
18 ifneq ($(strip $(C_DEPS)),)
19 -include $(C_DEPS)
20 endif
21 ifneq ($(strip $(CC_DEPS)),)
22 -include $(CC_DEPS)
23 endif
24 ifneq ($(strip $(CPP_DEPS)),)
25 -include $(CPP_DEPS)
26 endif
27 ifneq ($(strip $(CXX_DEPS)),)
28 -include $(CXX_DEPS)
29 endif
30 ifneq ($(strip $(C_UPPER_DEPS)),)
31 -include $(C_UPPER_DEPS)
32 endif
33 endif
35 -include ../makefile.defs

1
2 # Automatically-generated file. Do not edit!
5 -include ../makefile.init //包含上级目录的makefile.init文件
6
7 RM := rm -rf //定义一个变量RM,初始值是rm -rf,下文如有用到RM,等价于使用命令"rm - rf", 即强制删除文件命令。
8
9 # All of the sources participating in the build are defined here
10 -include sources.mk //包含当前目录下的sources.mk文件
11 -include subdir.mk //包含当前目录下的subdir.mk文件
12 -include objects.mk //包含当前目录下的objects.mk文件
13
14 ifneq ($(MAKECMDGOALS),clean) //比较参数“MAKECMDGOALS ”的值是否等于"clean", 如果不等,则为真。
15 ifneq ($(strip $(C++_DEPS)),)
16 -include $(C++_DEPS) //包含当前目录下的$(C++_DEPS) 文件
17 endif
18 ifneq ($(strip $(C_DEPS)),) //strip函数的功能是去掉字符串开头和结尾的空格
19 -include $(C_DEPS)
20 endif
21 ifneq ($(strip $(CC_DEPS)),)
22 -include $(CC_DEPS)
23 endif
24 ifneq ($(strip $(CPP_DEPS)),)
25 -include $(CPP_DEPS)
26 endif
27 ifneq ($(strip $(CXX_DEPS)),)
28 -include $(CXX_DEPS)
29 endif
30 ifneq ($(strip $(C_UPPER_DEPS)),)
31 -include $(C_UPPER_DEPS)
32 endif
33 endif
35 -include ../makefile.defs
参考技术A easy, 不过一行一行的比较麻烦:

1, -include 和c语言的 #include 差不多,是把文件插入到当前文件的当前位置。

2, ifneq ($(MAKECMDGOALS),clean) : 如果变量MAKECMDGOALS 的值 不等于 clean.

3,strip函数的功能是取掉字符串开头和结尾的空格, $(stip ni hao ) 示例以" ni hao "作参数时其返回值是"ni hao".

注意: makefile和shell类似,变量类型只有一种,那就是字符串类型,即使你这样定义 INT = 123, INT 也会被当作"123"字符串来处理。追问

-include ../makefile.init
-include ../makefile.defs能解释一下上面两句话吗,谢谢
还有ifneq里面的都是宏吗,我怎么遍了也未找到定义

追答

1, ../makefile.init 代表当前目录的父目录下的makfile.init 文件, 这句就是把当期目录的父目录下的makefile.init插入到当前文件的当前位置。

2, ifneq ($(MAKECMDGOALS),clean) 里面这个MAKECMDGOALS是个变量,makefile没有宏这个说法。 因为在这句之前有
-include ../makefile.init
-include sources.mk
-include subdir.mk
-include objects.mk

这4句,所以如果你在当前makefile找不到MAKECMDGOALS这个变量就去上面的4个文件里去找找,如果真的找不到,那么就是说没有定义MAKECMDGOALS这个变量,这时$(MAKECMDGOALS)等于空,即""。

1, ../makefile.init 代表当前目录的父目录下的makfile.init 文件, 这句就是把当期目录的父目录下的makefile.init插入到当前文件的当前位置。

2, ifneq ($(MAKECMDGOALS),clean) 里面这个MAKECMDGOALS是个变量,makefile没有宏这个说法。 因为在这句之前有
-include ../makefile.init
-include sources.mk
-include subdir.mk
-include objects.mk

这4句,所以如果你在当前makefile找不到MAKECMDGOALS这个变量就去上面的4个文件里去找找,如果真的找不到,那么就是说没有定义MAKECMDGOALS这个变量,这时$(MAKECMDGOALS)等于空,即""。

本回答被提问者采纳
参考技术B 关注

运行特定测试,这是 Makefile 中目标测试的一部分

【中文标题】运行特定测试,这是 Makefile 中目标测试的一部分【英文标题】:Running specific test which is part of goal test in Makefile 【发布时间】:2016-03-22 15:56:56 【问题描述】:

我正在运行“nmake 测试”并经历了 2 次失败的测试。

这是测试总结报告:

Test Summary Report
-------------------
../lib/File/Copy.t                                              (Wstat: 256 Tests: 466 Failed: 1)
  Failed test:  53
  Non-zero exit status: 1
../lib/locale.t                                                 (Wstat: 0 Tests: 660 Failed: 1)
  Failed test:  424
Files=2384, Tests=696984, 1309 wallclock secs (73.41 usr +  4.73 sys = 78.14 CPU)

如何在不运行整个目标的情况下运行这两个测试?

【问题讨论】:

【参考方案1】:

你不能。这些是Copy.t 文件中的命令。你可以做的是只运行 Copy.t 并添加 -v 标志以使其变得冗长,它会准确地告诉你 哪个 失败。但是没有办法只运行一个 .t 文件的一部分。

看起来像这样:

foo@bar: ~/file-copy $ prove -vl File/Copy.t

【讨论】:

以上是关于解释这个makefile,这是一部分,我知道这是一个eclipse的工程,解释5到35行的主要内容,如果未能解决你的问题,请参考以下文章

makefile 上的 GCC 和 Crypto++

无法在makefile中调用bash函数

Makefile:链接器错误[重复]

linux shell: 帮我解释下这个makefile每一行的意思嘛

Linux之父:连你自己都懒得解释,那这就是一堆垃圾!

C 如何为 MPI 程序创建 Makefile?