【问题标题】:Why does make always update this target?为什么make总是更新这个目标?
【发布时间】:2013-09-16 20:33:02
【问题描述】:

在我的Gentoo机器(即GNU make 3.82)上使用make和下面的Makefile,我想知道为什么每次我执行make data/spectra/o4_greenblatt_296K.dat时目标data/spectra/o4_greenblatt_296K.dat都会更新,即使文件params/base/fwhm.datparams/base/wavelength_grid.datdata/raw/o4green_gpp.dat 均未更改,文件data/spectra/o4_greenblatt_296K.dat 已存在:

FWHM = params/base/fwhm.dat
WLGRID = params/base/wavelength_grid.dat

$(WLGRID): code/create_wavelength_grid.py
    cp code/create_wavelength_grid.py params/base/wavelength_grid.dat

$(FWHM): code/create_fwhm_param.py
    cp code/create_fwhm_param.py params/base/fwhm.dat

data/raw/o4green_gpp.dat:
    echo 1 > data/raw//o4green_gpp.dat

input_spectra_o4_raw: data/raw/o4green_gpp.dat

data/spectra/o4_greenblatt_296K.dat: $(WLGRID) $(FWHM) input_spectra_o4_raw 
    echo 1 > data/spectra/o4_greenblatt_296K.dat

input_spectra_o4: data/spectra/o4_greenblatt_296K.dat

非常感谢你们对make新手的任何帮助:)

【问题讨论】:

  • code/ 文件呢?
  • 那些也不会改变。
  • 运行make -d。它会很快(虽然很冗长)告诉你为什么它决定重建每个目标。我强烈建议您在食谱中使用自动变量,特别是 $@$<,以减少拼写错误的风险。
  • @MadScientist 你应该提供这个作为答案 i.o.只是一个评论。我刚刚投了赞成票。

标签: makefile gnu-make


【解决方案1】:

我猜是因为没有名为input_spectra_o4_raw 的文件,这是你data/spectra/o4_greenblatt_296K.dat 的先决条件。

决定看起来像这样:

1. params/base/wavelength_grid.dat and params/base/fwhm.dat are both up to date
2. check input_spectra_o4_raw - file does not exist, so build it first
3. there is a target for input_spectra_o4_raw, and it's prerequisite
   data/raw/o4green_gpp.dat is up to date, so run all the commands to build 
   input_spectra_o4_raw (there are none, though, so we essentially just mark that we've 
   done everything we need to for input_spectra_o4_raw and that we built it new)
4. we just built input_spectra_o4_raw, so data/spectra/o4_greenblatt_296K.dat is out of 
   date with respect to that prerequisite and needs to be rebuilt

您应该研究如何使用.PHONY: 伪目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 2011-04-25
    • 1970-01-01
    • 2014-07-08
    • 2011-04-12
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多