【问题标题】:Can make build targets for unknown pre-requisites?可以为未知的先决条件制作构建目标吗?
【发布时间】:2014-09-22 03:52:12
【问题描述】:

我需要处理所有具有特定扩展名的文件,并将结果打包到一个存档中。有没有办法让make 这样做?

例如,假设我需要获取所有 .w 文件并为每个文件生成一个 .n 文件,其中任何元音变为句点,然后 tar up结果。如果我按如下方式创建Makefile

novowels.tar: %.n
    tar cf $@ $^

%.n: %.w
    sed -e "s/[aeiou]/./g" > $@ < $<
如果目录中没有 .n 文件,

make(不出所料)返回以下内容:

make: *** No rule to make target '%.n', needed by 'novowels.tar'.  Stop.

我可以调用make the.n,它会从the.w 创建文件(假设存在),如果我再调用make,它将被包含在存档中。

问题是:如何(最好)让make 意识到有一大堆 .w 文件需要转换为 .n 文件第一名?

【问题讨论】:

    标签: makefile


    【解决方案1】:

    以此为例:

    ALLFILES_IN  := $(wildcard *.w)
    ALLFILES_OUT := $(ALLFILES_IN:.w=.n)
    
    
    $(info In : $(ALLFILES_IN))
    $(info Out: $(ALLFILES_OUT))
    
    %.n: %.w 
       cat $< > $@
    
    all.tar: $(ALLFILES_OUT)
      @echo "Tar:" $^
    

    也许你会发现类似的东西很有帮助:

    CPP_FILES := $(wildcard src/*.cpp)
    OBJ_FILES := $(addprefix obj/,$(notdir $(CPP_FILES:.cpp=.o)))
    

    从以下位置被盗: Can I compile all .cpp files in src/ to .o's in obj/, then link to binary in ./?

    【讨论】:

    • 太棒了!我知道会涉及到通配符,但没有发生列出输入文件然后更改扩展名以获取输出文件并将其设为 pre-req。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多