使用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

回到顶部