使用MAKEFILE在编译之前复制文件并在删除它们之后删除它们
我试图复制文件befoe编译(我有两个源文件具有相同的名称,因此我将这些文件复制到具有不同名称的文件),并在最后删除它们的MAKEFILE。 我正在尝试做下列事情,但可能在执行顺序中存在不匹配。 我该如何正确地做到这一点?使用MAKEFILE在编译之前复制文件并在删除它们之后删除它们
all: copy_dup_files $(dst_dir) $(APP_TARGET_LIB) delete_dup_files copy_dup_files:
@echo "COPYING DUP FILES"
$(shell cp /aaa/hmac.c /aaa/hmac1.c)
$(shell cp /bbb/hmac.c /bbb/hmac2.c)
delete_dup_files:
@echo "DELETING DUP FILES"
$(shell rm /aaa/hmac1.c)
$(shell rm /bbb/hmac2.c)
由于
回答:
的$(shell)
的目的是,以产生使读取的输出。配方行根本不应该有这个结构。
# this is evaluated when the Makefile is read value := $(shell echo "Use the shell to produce a value for a variable")
# this is evaluated when you say "make foo"
foo:
echo 'No $$(shell ...) stuff here'
所以,当读Makefile
都在你的企图$(shell ...)
东西被评估,但在执行任何实际的目标之前。
回答:
您的生成文件试图说/aaa/hmac1.c
取决于/aaa/hmac.c
。 因此,我们有:
/aaa/hmac1.c: /aaa/hmac.c cp $< [email protected]
/bbb/hmac2.c: /bbb/hmac.c
cp $< [email protected]
/aaa/hmac1.o /bbb/hmac2.o: %.o: %.c
gcc $< -o [email protected]
myprog: /aaa/hmac1.o /bbb/hmac2.o
gcc $^ -o [email protected]
这是干净的,安全的平行(任何生成文件的一个很好的测试)。
有无数风格的改进,你可以做,像
- 摆脱了绝对路径的
- 使用符号链接,而不是复制
- 自动依存产生的(对于
.h
文件等) - 不要污染源树—将所有中间文件(
.o
和临时.c
s)放在它们自己的生成文件夹中
& c。 & c。
以上是 使用MAKEFILE在编译之前复制文件并在删除它们之后删除它们 的全部内容, 来源链接: utcz.com/qa/261312.html