2012-07-20 32 views
1

我試圖編輯一個控制從文本文件生成pdf文件(Sphinx,如果你熟悉它)的make文件。它目前的設置使得每個文檔有一個make文件(你有一個源目錄和一個生成目錄),但是我想調整目錄結構,並且只有一個全局makefile,當make命令被稱爲'make latexpdf',則爲所有文檔生成pdf。Makefiles中的變量

我相信這可以通過定義變量時使用某種通配符系統來完成,但我遇到了這個問題。

在它的設置是這樣的時刻:(我只包括相關線路)

BUILDDIR  = builddir 
SOURCEDIR  = sourcedir  
$(SPHINXBUILD) some options $(SOURCEDIR) $(BUILDDIR)/latex 
$(MAKE) -C $(BUILDDIR)/latex all-pdf 

但是爲了能夠讓它經過在源目錄中的每個子目錄,並把它打造到相同名稱的子目錄中,我想我可以做類似這樣的事情:

EACHDIR  = {"subdir 1","subdir 2"} #This is the line that I need help with.           
            #subdir refers to each document that I'm making  
BUILDDIR  = builddir/$(EACHDIR)  
SOURCEDIR  = sourcedir/$(EACHDIR)  
$(SPHINXBUILD) some options $(SOURCEDIR) $(BUILDDIR)/latex  
$(MAKE) -C $(BUILDDIR)/latex all-pdf  

雖然這並不適用於我。任何指導將不勝感激。

感謝

回答

1

我會做這樣的事情:

SUBDIRS = subdir1 subdir2 

BUILDDIR = builddir 
SOURCEDIR = sourcedir 

# Define each subdir as a target 
$(SUBDIRS): 
    $(SPHINXBUILD) $(SOURCEDIR)/[email protected] $(BUILDDIR)/[email protected]/latex 
    $(MAKE) -C $(BUILDDIR)/[email protected]/latex all-pdf 

# However, these targets aren't real files, so declare them as phony 
.PHONY: $(SUBDIRS) 

應該工作(儘管有錯別字)。

但是,一般而言,您應該避免對Make進行遞歸調用(請參閱Recursive Make Considered Harmful)。基本上,它阻止頂級Make跟蹤整個依賴關係樹,這會導致次優構建過程和/或不一致的重建。

+0

謝謝!你介意說明如何使用'make all'來允許我不必爲每個文檔輸入每個'make subdir1'等命令?它只是一個嵌套'$(SUBDIRS):'在'all:'內部的情況嗎? – user1488804 2012-07-20 13:59:12

+0

@ user1488804:是的,你只需要'all:$(SUBDIRS)',還有'.PHONY:all'。 – 2012-07-20 14:01:59

+0

謝謝。我仍然遇到了麻煩與多個目錄,但我懷疑這些是獅身人面像在不同的文件中有抱怨。希望我能解決這些問題,而不會有太多的麻煩 – user1488804 2012-07-20 14:39:22