2012-03-13 49 views
1

我對包含生成文件的源文件的depressive排序有問題。例如,在一個文件名爲unit.cpp我有這樣的:如何在automake中設置對源文件的任意依賴關係,無需生成源文件

#include "generated.hpp" 

generated.hpp是一個生成的文件,並且將在輸出產生包括目錄。現在,通過中間命令生成該文件,以生成文件規則,例如:

.build-generated: 
    cmd.sh ... > include/generated.hpp 
    touch [email protected] 

unit.o文件的建築因此需要.build-generated首先被調用。如果我下面我混淆產生的Makefile:

unit.cpp: .build-generated 

由於化妝現在假設unit.cpp是一個生成的文件,而忽略了一個在源代碼目錄(僅當.build產生已是翻拍) 。我查看了詳細的make輸出,它說它忽略了VPATH中的那個。

在一個正常的生成文件中,我可能會使unit.o依賴於另一個目標,但這看起來不是automake的方式(因爲它可能不是可移植的)。 它實際上甚至不工作,因爲目標可能是一個.lo文件,而不是

我怎樣才能正確地講述這種依賴性的automake?

回答

0

如果使用使用automake autoconf的,你可以從你的頭取決於你的源文件:

$srcdir/unit.cpp : $builddir/include/generated.hpp 

如果$builddir不適合你(例如,你可以使用普通的報頭包含在多個Makefile.am ),請使用$top_builddir。其他有用的autoconf變量可以在here找到。

+0

這不起作用,它是我第一次嘗試。然而,這可能是一個缺陷。當依賴過時時,它無法找到unit.cpp - 在詳細模式下,它明確表示它忽略了發現的VPATH。 – 2012-03-13 07:44:30

1

按automake的手冊,你對每個指定:

BUILT_SOURCES = generated.hpp 
+0

我也看到了,但是隻有在運行'make all'或其他全局目標時纔會生成。我想建立在單個目標上,因爲這是我們典型的開發過程(在構建某個東西時只建立子目標)。 – 2012-03-13 11:28:39

0

我認爲正確的解決辦法是讓文件取決於生成的標頭對象:

include/generated.hpp: 
    cmd.sh ... > include/generated.hpp 
    touch [email protected] 
unit.o: include/generated.hpp 

萬一使用automake,像

$(prog_OBJECTS): include/generated.hpp 
相關問題