学习openjdk的make

1.最基本的格式:
目标:依赖
    命令
注意命令前是个tab符号

2..PHONY关键字,表示这个后面的目标是个不需依赖的目标.如

.PHONY:default
default:
    echo $(MAKE_VERSION)


3.上面有个变量$(MAKE_VERSION)是从那里来的?
这个是make的内部变量,那么如何查看所有变量呢?
make -p
用这个命令就可以了。


4.如果shell里只敲make,则会从上到下顺序执行。

5.命令可以有多行,比如:
.PHONY:default
default:
    echo $(MAKE_VERSION)
    echo $(KERNEL_VERSION)



6.下面的NOTPARALLEL表示本文件串行执行
# Inclusion of this pseudo-target will cause make to execute this file
# serially, regardless of -j.
.NOTPARALLEL:

7.ifeq与程序里的if差不多。写法有些不一样,如下:
# The .FEATURES variable is likely to be unique for GNU Make.
ifeq ($(.FEATURES), )
  $(info Error: '$(MAKE)' does not seem to be GNU Make, which is a requirement.)
  $(info Check your path, or upgrade to GNU Make 3.81 or newer.)
  $(error Cannot continue)
endif

上面第一行以#开头是注释,第二行表示如果变量$(.FEATURES)为空执行下面几行。

8.:=表示定义的值不再变了,有点像java里的final关键字。运行下面代码,体会用途。
# Locate this Makefile
ifeq ($(filter /%, $(lastword $(MAKEFILE_LIST))),)
  makefile_path := $(CURDIR)/$(strip $(lastword $(MAKEFILE_LIST)))
else
  makefile_path := $(lastword $(MAKEFILE_LIST))
endif
topdir := $(strip $(patsubst %/, %, $(dir $(makefile_path))))
my_path=/home/xx
topdir := 11$(my_path)
my_path=/home/yy
.PHONY:default
default:
    echo $(makefile_path)
    echo $(topdir)


9.include关键字,就是英文的意思。包含,引用别的文件。如
include $(topdir)/make/Init.gmk

上面是一些基本命令,然后我们可在Init.gmk中看到

  print-modules:
    ( cd $(TOPDIR) && \
        $(MAKE) $(MAKE_ARGS) -j 1 -f make/Main.gmk $(USER_MAKE_VARS) \
        NO_RECIPES=true print-modules )

  print-targets:
    ( cd $(TOPDIR) && \
        $(MAKE) $(MAKE_ARGS) -j 1 -f make/Main.gmk $(USER_MAKE_VARS) \
        NO_RECIPES=true print-targets )

我们用make print-targets来看看可以做那些事。grep一下是不是也看到了昨天的images目标?


我还发现了一个jrtfs-jar,当我们查看Integer源码时,会指向这个jar包。那么这个是jdk的基本库,如果是改基本库的java文件,那么就只用编译这个就行了。

是这样么?其实不是,jdk9开始搞了一套模块化的东西,Integer.class在java.base.jmod这个文件里也有。看来手工换一个class文件并不容易。但经过实验,我还是找到了比较快的办法。


开始生成jdk我们用的是make images命令,然后配置eclipse的jdk时选images文件夹里的jdk。

现在我们改了Integer.java后,用make jdk-image命令,同样也会生成到相同位置,但需生成的东西少了,速度快多了。机器因过热而断点的机率也小了很多。
文/程忠 浏览次数:0次   2020-04-02 15:37:42

相关阅读


评论:
点击刷新

↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑