我不完全理解如何使用特定于目标的变量作为目标本身,拥有自己的依赖性和菜谱。
示例Makefile,它可以工作,但不使用特定于目标的变量:
VAR=progName
ATARGET: $(VAR)
@echo Do actions for $@ based on the completed target $(VAR)
$(VAR):
@echo Do actions on $@
制造ATARGET
在progName上执行操作
基于已完成的目标progName执行ATARGET操作
Makefile,它无法尝试使用特定于目标的变量(请注意在执行make时缺少“在progN
摘要:我正在处理一个生成(并可选地“生成”) makefile的makes。从历史上看,它使用的是一个make make“虚假目标”。我想把它改为make makefile,因为它看起来更连贯,更能代表正在发生的事情。但是,当我更改它并切换到.FORCE成语以便它将依赖于一个人造的假目标生成时,看起来makefile被创建了4次,原因我不明白。
Details:脚本的工作方式是您可以编写:
make -f makefile.boot
或者:
make -f makefile.boot make
在第一种情况下,假设您希望使用makefile.boot中的规则生成特定于平台的makefile,然
我试图将一个名为"project“的目录压缩到一个名为”.zip“的BARBIER_MAM.zip文件中。但是,在解压缩.zip文件时,所有包含的文件都会显示出来,我必须手动将它们放回目录中。以下是我目前的做法。在"project“目录中,我有一个具有”归档“目标的makefile:
archive: clean
zip -r BARBIER_MAM.zip .
我也尝试过:
archive: clean
cd ..
zip -r BARBIER_MAM.zip project
但我有个错误:
zip warning: name not matched:
当我遵循Linux书的例子时,我在我的makefile中编写了目标。下面是对我的makefile的删减
result:=
all :
$(result) = $(subst a, A, how are you)
echo -n "the result is :"
echo $(result)
.PHONY: all
在空壳里,
it@ubuntu:~/luke/c_test$ make -s all
makefile:5: *** empty variable name. Stop.
如何将函数的值返回到目标中的“结果”?
GNU允许1)并行执行,2)在同一调用中指定多个目标:
make -j4 clean all
但是,当GNU使目标并行化时,可能会出现一些竞赛条件。说明:
$ cat Makefile
clean:
@sleep 1 && rm -f foo
all: foo
@sleep 2 && cat foo
foo:
@echo '$@' > $@
$ make -j4 clean ; make -j4 all
foo
$ make -j4 clean all
cat: foo: No such file or dire
我在这里慢慢失去理智了。首先,让我来描述一下我想做什么。我们有一个编译器,它释放出格式怪异的依赖文件。要将这些makefile转换成GNU可以理解的格式,它们需要首先由Perl脚本处理。从技术上讲,Perl脚本不会转换它所传递的输入依赖文件;相反,它会为每个输入依赖文件创建一个新的、格式正确的依赖文件。
现在,为了让GNU知道哪些翻译单元需要重新编译,哪些不需要编译,显然在尝试使翻译单元成为目标之前,它一定已经看到了这些依赖文件,所以我们的主makefile中有以下一行:
include $(PROCESSED_EXISTING_DEPENDENCY_FILES)
其中$(PROCESSED_