我有一个makefile,它在命令行中获取选项
make OPTION_1=1
Run Code Online (Sandbox Code Playgroud)
根据该值,它将向对象子集添加其他编译器定义.
ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif
Run Code Online (Sandbox Code Playgroud)
定义中的更改会影响包含的头文件内容 - 存根或实现会暴露给目标文件.
如何通过此选项更改来重建受影响的文件?
我想做一个使用gnumake或makepp运行的Makefile,它包含给定directiories下的所有文件:
DIRS:=$(shell find . -mindepth 2 -maxdepth 2 -not -name mp3 -not -name ".*" -type d)
PACKAGES = $(DIRS:%=%.npk)
all: packages
packages: $(PACKAGES)
%.npk: %/*
npack c $@ @^
.PHONY: all packages
Run Code Online (Sandbox Code Playgroud)
问题是依赖项中没有%/*这样的东西.我需要目标(X.npk)依赖于目录X中的每个文件,但是当我编写Makefile时我不知道文件是什么,因为它们是稍后生成的.
一个例子:
./dirA/x
./dirA/y
./dirB/e
./dirB/f
Run Code Online (Sandbox Code Playgroud)
我想创建./dirA.npk(取决于x,y),./dirB.npk(e,f)除了在第1行中使用的查找之外,我没有提前知道dirs或文件发现所有的目录.
使用Make是一种很好的依赖目录内容的方法.
基本上我有一些应用程序代码依赖的生成代码.如果目录的内容发生变化,则生成的代码只需要更改,不一定是在内部文件更改其内容时.因此,如果删除或添加或重命名文件,我需要运行规则.
我的第一个想法是生成一个文本文件列表的目录和差异与最后一个列表.更改意味着重新运行构建.我想我必须将generate和diff部分传递给bash脚本.
我希望以某种方式在他们的无限智慧中可能有一个更容易的解决方案.