2014-12-26 79 views
1

我想了解如何寫我自己的小項目生成文件,所以我有幾個問題 我的項目包括src目錄包含main.cfile1.cfile2.cheader1.h,終於header2.h使用這些文件中的一些從我所創建的非標準庫和非標頭文件庫,該庫目錄位於usr/lib/pr__lib和標題目錄位於usr/include/lib
所以我應該創建兩個makefile.am一個將位於src目錄和其他人會在項目的根目錄src目錄的makefile.am如下所示:初級寫作makefile;檢查我的Makefile

program_NAME := PRDSL 

bin_PROGRAMS = PRDSL_AutoProject 

program_INCLUDE_DIRS := /usr/bin/PR__bin 

program_LIBRARY_DIRS := /usr/lib/PR__lib 

CFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir)) 

program_LIBRARIES := \ 
     libprdependency \ 
     libprdynarray_pic \ 
     libprhistogram_pic \ 
     libprlistofarrays \ 
     libprlistofarrays_pic \ 
     libprmalloc \ 
     libvreo_wrapper_library 

AM_LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir)) 

AM_LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library)) 

PRDSL_AutoProject_SOURCES = \ 
     main.c \ 
     file1.c \ 
     file2.c 

depend : 
     makedepend --$(CFLAGS) --$(PRDSL_AutoProject_SOURCES) 

all: $(program_NAME) 

2日在根目錄makefile.am如下圖所示:

SUBDIRS = src 

    PRDSL_AutoProjectdocdir = ${prefix}/doc/PRDSL_AutoProject 
    PRDSL_AutoProjectdoc_DATA = \ 
       README\ 
       COPYING\ 
       AUTHORS\ 
       ChangeLog\ 
       INSTALL\ 
       NEWS 


    INTLTOOL_FILES = intltool-extract.in \ 
      intltool-merge.in \ 
      intltool-update.in 

    EXTRA_DIST = $(PRDSL_AutoProjectdoc_DATA) \ 
      $(INTLTOOL_FILES) 

    DISTCLEANFILES = intltool-extract \ 
      intltool-merge \ 
      intltool-update \ 
      po/.intltool-merge-cache 


    # Remove doc directory on uninstall 
    uninstall-local: 
      -rm -r $(PRDSL_AutoProjectdocdir) 

,但我得到了下面的錯誤和警告,而我是跑automake命令:

src/Makefile.am:20: error: 'program_LIBRARIES' is used but 'programdir' is undefined 
    src/Makefile.am:18: warning: 'CFLAGS' is a user variable, you should not override it; 
    src/Makefile.am:18: use 'AM_CFLAGS' instead 
    src/Makefile.am:43: error: AM_LDFLAGS must be set with '=' before using '+=' 

可以在任何一個檢討它並幫助我?

+0

難道你沒有在你的[其他問題]上得到有關該錯誤的答案(https://stackoverflow.com/questions/27655278/what-is-the-difference-between-am-ldflags-and-ldflags) ? –

+0

@EtanReisner不幸的是,它不能解決我的錯誤:( – Sara

+0

@EtanReisner我試圖重新安裝automake並升級它,但出現同樣的錯誤,我用這個命令來升級「sudo apt-get upgrade automake」? – Sara

回答

1

對於src/Makefile.am:43: error: AM_LDFLAGS must be set with '=' before using '+='請參閱my answer到您的previous question

是,以下行告訴你使用AM_CFLAGS代替CFLAGS因爲,作爲錯誤指示,CFLAGS是用戶指定的值,你應該息事寧人。

src/Makefile.am:18: warning: 'CFLAGS' is a user variable, you should not override it; 
src/Makefile.am:18: use 'AM_CFLAGS' instead 

我相信,雖然我遠一些,你得到src/Makefile.am:20: error: 'program_LIBRARIES' is used but 'programdir' is undefined的原因是因爲你使用的是可變program_LIBRARIES的自動工具認爲這是他們應該使用一個變量,但你沒有使用這種方式,而是使用在設置爲AM_LDFLAGS的值的循環中。因此,假設我是正確的,如果您將其重命名爲不遵循autotool變量命名方案,我相信錯誤將消失。

+0

我改名program_LIBRARIES到program_lib2並沒有抱怨這個錯誤了,但它給了我一個新的錯誤在執行make命令從終端:( 但我還是選你的答案是正確的之一,因爲它解決了上述問題 真的很感謝,我會在這裏發佈新的錯誤,如果你想幫助我嗎? – Sara

+0

您可以發佈它作爲一個評論在這裏,但我可能只是告訴你提交一個新的問題,它假定它是不會立即微不足道。 –

+0

它抱怨庫, 使所有遞歸 化妝[1]:進入目錄'/家庭/薩拉/的NetBeansProjects/PRDSL_AutoProject」 使所有在SRC 化妝[2]:進入目錄'/家庭/薩拉/的NetBeansProjects/PRDSL_AutoProject/src' CCLD P RDSL_AutoProject ../libtool:第5986行:cd:libprdependency:沒有這樣的文件或目錄 libtool:link:無法確定絕對目錄名稱爲'libprdependency' make [2]:*** [PRDSL_AutoProject] Error 1 – Sara