2010-01-15 47 views
1

我有一個程序main.c,它在程序中調用header.c和header.h的幫助。我知道如何在GCC中進行編譯,但現在我想使用autotools。我想知道Makefile.am中應該寫什麼來編譯main.c?因此,例如,如果我有兩個C文件main.c中和header.c如下2個程序的自動工具

main.c中

: -

#include<stdio.h> 
#include"header.h" 
int main(int argc, char* argv[]) 
{ 

    printf("\n Hello"); 
    function1(); 

    return 0; 
} 

和我header.c文件包含

#include<stdio.h> 
void function1() 
{ 
    printf("\n Hi"); 
} 

所以我header.h文件將包含

void function1(); 

那麼在這種情況下,我應該在makefile.am和configure.ac寫入

回答

0

的最小Makefile.am:

SHELL = /bin/sh 

prefix = /usr/local 
exec_prefix = @[email protected] 
bindir = ${exec_prefix}/bin 

AM_CFLAGS = -I./ 

bin_PROGRAMS = your_program_name 

niue_SOURCES = main.c 


install-exec-local: 
    cp ./your_program_name ${bindir} 

uninstall-local: 
    rm ${bindir}/your_program_name 

您可能需要一個configure.ac以及:

# Process this file with autoconf to produce a configure script. 

AC_PREREQ(2.59) 
AC_INIT(your_program_name, 0.1, [email protected]) 
AM_INIT_AUTOMAKE 
AC_CONFIG_SRCDIR([main.c]) 
AC_CONFIG_HEADER([config.h]) 

# Checks for programs. 
AC_PROG_CC 

# Checks for additional libraries. 
# AC_CHECK_LIB([pthread], [pthread_create]) 

# Checks for additional header files. 
# AC_CHECK_HEADERS([getopt.h]) 

# Checks for typedefs, structures, and compiler characteristics. 
AC_HEADER_STDBOOL 
AC_C_CONST 
AC_TYPE_SIZE_T 
AC_HEADER_TIME 
AC_C_VOLATILE 

# Checks for library functions. 
AC_HEADER_STDC 
AC_FUNC_SELECT_ARGTYPES 
#AC_CHECK_FUNCS([getopt_long]) 

AC_CONFIG_FILES([Makefile]) 
AC_OUTPUT 
4

下面是您描述的情況所需的一個簡單示例。

您需要包含二進制程序來建立的名稱makefile.am,以及所使用的源文件來構建它(你沒有列出的頭文件,他們將被自動檢測):

bin_PROGRAMS = example 
example_SOURCES = main.c header.c 

而且你需要一個configure.ac。在這裏,您設置程序的名稱和版本號,使用foreign參數初始化Automake,以便它不會向您抱怨GNU項目需要的丟失文件,告訴它您需要一個C編譯器,告訴它編譯你的Makefile,最後告訴它輸出以前配置的結果。

AC_INIT([example], [1.0]) 
AM_INIT_AUTOMAKE([foreign]) 
AC_PROG_CC 
AC_CONFIG_FILES([Makefile]) 
AC_OUTPUT 

如果現有的程序有任何庫依賴的,你可以運行autoscan檢測可能的依賴性。它生成一個文件configure.scan,其中包含一個模板,可用於幫助您構建您的configure.ac;但是如果你的程序很簡單,你可以跳過這一步,並使用上面的最小例子。

現在運行autoreconf --install複製一些必要的文件,並從上述配置文件中構建Makefile.inconfigure。然後,運行./configure來配置您的腳本,生成一個Makefile。最後,運行make來構建你的程序。

一旦你完成了這些步驟,您已經生成將檢測更改您的makefile.am並再次運行步驟,所以從現在開始,你應該能夠公正運行make而不必通過所有這些步驟的Makefile再次。

查看AutomakeAutoconf手冊瞭解更多信息。

0

所以例如,如果我有兩個c文件main.c和頭。C作爲下面

main.c中給出: -

包括

包括 「header.h」

INT主(INT的argc,字符* argv的[]){

printf(「\ n Hello」); function1();

return 0; }

和我header.c文件包含

包括

無效功能1(){ 的printf ( 「\ n你好」); }

所以我的header.h文件將包含 void function1();

那麼在這種情況下應該寫什麼makefile.am和configure.ac

+1

嗨,Jinal。你在這裏似乎是新手,所以我會給你一些關於如何使用該網站的建議。像這樣的澄清應該作爲對原始問題的編輯來完成,而不是作爲對自己問題的回答。看看你的問題的左下角;您應該看到一個小小的「編輯」鏈接,您可以點擊該鏈接,然後編輯您的問題以提供任何說明。另外,任何源代碼都應該縮進4個空格;這會導致它被格式化爲源代碼,而不會被解釋爲樣式文本。您可以選擇整個代碼塊並按下'101010'按鈕縮進。 – 2010-01-15 15:35:40

+0

我已經爲你做了編輯;有經驗的用戶可以編輯其他人的問題和答案來幫助解決這類問題。如果您認爲自己的問題沒有得到充分解答,那麼您也可以迴應讓已回答問題的人知道他們的答案不夠好或者不適合您。我提供的答案應該適用於你在這裏描述的確切情況(我甚至用一個示例項目對其進行了測試),所以如果你能告訴我哪個部分不適合你,它會幫助我提供更好的答案,或者我的答案不清楚。 – 2010-01-15 15:44:29