2017-03-11 57 views
0

我有以下設置:如何驗證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

make使用的語言與shell使用的語言不同。比如像

PROJECT_NAME := `cat .project-name` 

不會讓PROJECT_NAME。項目名稱文件的內容(這將分配字符串 「`貓的.project-name`」。同樣,

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

不會做你認爲它。要指定一個shell命令的標準輸出,您需要使用make語法如

FOOFILE := $(shell cat foo) 
+0

謝謝您的幫助,我@Jens修改爲你建議,但錯誤仍然存​​在 'PROJECT_NAME:= $(shell cat .project-name)'還有 'TEST_PROJECT_NAME_2:= if ['dummy'== $ {PROJECT_NAME}];然後$(error「ERROR:El nombre del proyecto no puede ser'dummy',por favor utiliza otro nombre」); fi;' – nanounanue

+0

對於驗證部分,您應該使用'ifeq','ifdef','ifndef'等[在這裏](https://www.gnu.org/software/make/manual/html_node/Conditional- example.html的) – nanounanue