2011-12-30 49 views
3

我的構建過程使用了大量的第三方實用程序。許多這些實用程序都需要使用ASCII文本文件進行配置。我想從Makefile生成這些短文本文件。我知道的唯一方法是如何使用echo命令每次寫的文本文件中的一行,然後將輸出重定向這樣的:什麼是從Makefile生成文本文件的好方法?

foo.script: bar.prj 
     touch [email protected] 
     echo run >>[email protected] 
     echo -input bar.prj >>[email protected] 
     echo -output baz.out >>[email protected] 

這有點難看。更糟的是,我從Python程序生成Makefile。所以實際代碼看起來更像這樣:

TEMPLATE="""{target}: {input} 
     touch [email protected] 
     echo run >>[email protected] 
     echo -input {input} >>[email protected] 
     echo -output {output} >>%@""" 
TEMPLATE.format(target='foo.script',input='bar.prj',output='baz.out') 

這會變得非常難以閱讀和維護。有誰知道更好的方法?

回答:

不要從Make生成文本。調用以更容易生成文本的語言編寫的腳本。

+2

爲什麼不直接寫一個小python(或任何你更舒服的腳本)腳本來生成這些文本文件,並從你的Makefile中調用它? – Mat 2011-12-30 08:57:37

+3

我認爲這個SO問題的第一個答案會讓你做你想做的事情:http://stackoverflow.com/questions/649246/is-it-possible-to-create-a-multi-line-string-variable- in-a-makefile – 2011-12-30 09:09:38

+0

這些都是很棒的評論。我不喜歡有兩個(或更多)Python文件,第一個生成Makefile,第二個由Makefile調用。也許第一個可以用參數來調用,使它像兩個不同的腳本一樣行事?我會嘗試應用來自http://stackoverflow.com/questions/649246/is-it-possible-to-create-a-multi-line-string-variable-in-a-makefile的答案 – 2011-12-30 18:59:09

回答

1

如果您在構建過程中已經使用了python,則可以編寫一個小型python腳本,該腳本需要一個模板文件,一個目標文件和多個參數,並使用相應的參數從模板文件生成目標文件填入。

+0

我想要一個Python腳本來生成一個Makefile,然後讓Makefile生成所需的其他所有內容。我不希望Python腳本生成大量文件,因爲那樣它也必須爲這些大量文件創建很多子目錄,並且會讓Make難以知道需要創建哪些目標,並且難以運行'make clean'。如果唯一的答案是使用Python,那麼我可以做到這一點,但我正在尋找完全包含在一個Makefile中的東西。 – 2011-12-30 18:57:39

+0

我將概括您的答案,說從Makefile生成文本的最佳方式是調用用Python,Ruby或Perl等語言編寫的腳本。不要試圖從Make生成文本;它不是爲此而設計的。 – 2012-01-17 04:05:42

相關問題