如何验证Makefile中的需求/依赖项?

时间:2017-03-11 15:05:51

标签: makefile

我有以下设置:

/-
  .project-name
  Makefile
  ...

.project-name的内容为dummy

cat .project-name
dummy

Makefile的一个目标是set_project_name(顾名思义)在目录周围更改(使用sed)项目名称并调整一些路径

set_project_name: 
    @ag [dD]ummy -l0 | xargs -0 sed -i  "s/[dD]ummy/${PROJECT_NAME}/g"
    ## Renombrar la carpeta del proyecto
    @[[ -d dummy ]] && mv dummy/pipelines/dummy.py dummy/pipelines/$(PROJECT_NAME).py
    @[[ -d dummy ]] && mv dummy $(PROJECT_NAME)

同样在Makefile变量PROJECT_NAME只是

   PROJECT_NAME := `cat .project-name`

我想在执行.project-name

中的任何内容之前验证用户是否更改了Makefile的内容

我尝试使用

TEST_PROJECT_NAME_2 := [[ 'dummy' == $(cat .project-name) ]] && $(error "ERROR: The name of the project can not be 'dummy', please use another name")

但是不起作用,它会执行,但总是会抛出错误。

我也尝试使用ifeq顶部的Makefile,但两者都没有执行。我做错了什么?另外,这是最好的方法吗?

1 个答案:

答案 0 :(得分:1)

make使用的语言与shell使用的语法不同。像

这样的事情
PROJECT_NAME := `cat .project-name`

不会使PROJECT_NAME成为.project-name文件的内容(它将分配字符串“`cat .project-name`”。同样,

TEST_PROJECT_NAME_2 := [[ 'dummy' == $(cat .project-name) ]] ...

不会按照您的想法行事。要分配shell命令的标准输出,您需要使用make语法,例如

FOOFILE := $(shell cat foo)