2012-03-17 39 views
2

我努力學習GNU自動工具,和我下面一些教程,我試着一步從做一步:的Autoconf和Makefile

http://kern-81.homepage.t-online.de/autotools_tutorial.pdf

,但我有一個問題,在第8頁手動存在書面Makefile.in一線:

[email protected]@ 

autoconf 
./configure 

我產生的makefile我得到

BINDIR=${exec_prefix}/bin 

但是當我做

@echo $(exec_prefix) 

看來這個變量是空的,所以一切我會

make install 

會去/ bin中,這有點奇怪,爲什麼它沒有設置爲/ usr/bin,我應該向autoconf發出一些參數嗎?

在此.pdf文件

也是這樣記着說:

bindir is an output variable of AC INIT which also detects includedir, srcdir, libdir, and others. 

的是真的嗎?因爲在autoconf.am的這個例子是:

AC_INIT(helloworld, 0.0.1, [email protected]) 

所以這個簡單的宏做了這一切?如果是,如何?

+0

您可能犯了一個錯字,或者以其他方式誤解了您的結果。在生成的Makefile中應該有一行將exec_prefix設置爲$ {prefix}, – 2012-03-17 12:33:24

回答

5

是的,AC_INIT完成所有這些;-)你可以通過查看/usr/share/autoconf/autoconf/general.m4來了解它是如何實現的,以瞭解如何定義AC_INIT及其子例程。或者,製作除AC_INIT調用以外的空的configure.ac,然後查看生成的配置腳本以查看其展開的內容。

我認爲如果exec_prefix未設置,它默認爲prefix,所以二進制文件仍然會進入/usr/local/bin。當然,你可以通過簡單地運行make install並檢查二進制文件的位置來驗證。

+0

+1,但是我質疑推薦某人在general.m4中看起來的智慧! – 2012-03-17 12:34:05

+1

Autotools默認爲/ usr/local的基礎前綴,而不是/ usr,所以如果您不更改它,那麼exec_prefix將是/ usr/local/bin。 – MadScientist 2012-03-17 13:40:24

+0

@WilliamPursell,我想開車說'AC_INIT'不是一個簡單的宏... – ptomato 2012-03-17 15:03:33