2014-12-26 4 views
1

Я пытаюсь понять, как написать свой собственный Makefile для небольшого проекта, поэтому у меня есть несколько вопросов, мой проект состоит из src каталога, содержащего main.c, file1.c, file2.c, header1.h, и, наконец, header2.h эти файлы используют некоторые библиотека из нестандартной библиотеки, которую я создал, и нестандартный заголовочный файл, каталог библиотеки находится в usr/lib/pr__lib, а каталог заголовков находится в usr/include/lib
поэтому я должен создать два makefile.am, один из которых будет расположен в каталоге src, а другой будет в корневой директории проекта makefile.am каталога src приведен ниже:Новичок в написании 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) 

второй 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, что Autotools полагают, является переменной, они должны использовать, но которые вы не используете в и вместо этого используют в цикле, который устанавливает значение для AM_LDFLAGS. Как таковой и предполагая, что я прав, если вы переименуете это, чтобы не следовать схеме именования переменных autotool, я считаю, что ошибка исчезнет.

+0

i переименовал program_LIBRARIES в program_lib2 и больше не жаловался на эту ошибку, но это дает мне новую ошибку при выполнении команды make из терминала :( , но я буду отмечать ваш ответ как правильный, потому что он решает вышеуказанные вопросы действительно спасибо, могу ли я опубликовать новую ошибку здесь, если вы хотите мне помочь? – Sara

+0

Вы можете разместить здесь комментарий, но я, вероятно, просто скажу вам, чтобы задать новый вопрос, предполагая, что это не сразу тривиально. –

+0

он жалуется на библиотеки, сделать все рекурсией делают [1]: Вход в каталог '/ главная/Sara/NetBeansProjects/PRDSL_AutoProject» Изготовление всех в ЦСИ делают [2]: Вход в каталог '/ главная/Sara/NetBeansProjects/PRDSL_AutoProject/src ' CCLD P RDSL_AutoProject ../libtool: строка 5986: cd: libprdependency: нет такого файла или каталога libtool: link: невозможно определить абсолютное имя каталога 'libprdependency ' make [2]: *** [PRDSL_AutoProject] Ошибка 1 – Sara

Смежные вопросы