мой первый вопрос в переполнении стека!GNU autotool: Нет правила делать цель
Краткая информация вопрос: Я использую autotool для создания программы на C. Когда я использую делают команду, я встречаю ошибку:
No rule to make target `../lib_foo/libfoo.a', needed by `mistery_foo'. Stop.
Что-то деталь из моих вопросов:
Я делаю назначение моего учителя, в котором я должен использовать GNU Autotool для создания очень простой программы на C.
Файловая структура:/проекта: Основной, lib_foo, Makefile.am, configure.ac
/проект/главная: main.c, main.h, Makefile.am
/проект/lib_foo: foo.c, foo.h, Makefile.am
Ниже то, что я пишу для configure.ac и Makefile.am:
I. "проект/configure.ac":
AC_PREREQ([2.67])
AC_INIT([project1],[0.01],[[email protected]])
AM_INIT_AUTOMAKE([1.9 foreign])
AC_CONFIG_SRCDIR([./lib_foo/foo.c])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CC
AC_PROG_RANLIB
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mistery.h>]],\
[[ mistery_value(1);]])],\
[AC_DEFINE([MISTERY_VALUE_ONEPARAM], [],[CONSTANT])],[])
AC_SEARCH_LIBS([mistery_value],[magic vadoo mistery],[],[AC_MSG_ERROR([Libraries (mistery, magic, vadoo) not found])])
AC_CONFIG_FILES([Makefile lib_foo/Makefile main/Makefile])
AC_OUTPUT
P.S. AC_COMPLIE_IFELSE используется для определения количества параметров в функции mistery_value(). Я думаю, что это не имеет ничего общего с ошибкой.
II. проект/Makefile.am:
SUBDIRS = main lib_foo
III. проект/главная/Makefile.am
LDADD = ../lib_foo/libfoo.a
mydir = ../uselessbin
my_PROGRAMS = mistery_foo
mistery_foo_SOURCES = main.c main.h
mistery_foo_LDADD = ../lib_foo/libfoo.a
IV. проект/lib_foo/Makefile.am
noinst_LIBRARIES = libfoo.a
libfoo_a_SOURCES = foo.c foo.h
Тогда я бегу с порядком команд:
>cd project
> aclocal
> autoheader
> automake -a
> autoconf
> ./configure
> make
> make install
> ./uselessbin/mistery_foo
Когда я бегу сделать команду, я получил ошибку:
No rule to make target `../lib_foo/libfoo.a', needed by `mistery_foo'. Stop.
Я полагаю, проблема может быть в том, что у меня нет libfoo.a правильно установлен. Но библиотека libfoo.a не должна быть установлена, а только скомпилирована, поэтому мне нужно использовать «noinst_» в lib_foo/Makefile.am. Вот почему я застрял здесь.
Любые ответы будут оценены. Спасибо за помощь!
Могу ли я узнать, почему я пропустил голосование, обычно принято оставлять отзыв :) –
Эй, Висенте, я решил это. Проблема в том, что в проекте/src/Makefile.am я установил подкаталог «main» перед «lib_foo». Таким образом, make будет иметь дело с «основным» перед «lib_foo». Но дело в src/main/main.c Мне нужно использовать «libfoo.a», который генерируется src/lib_foo/foo.c. Поэтому я изменяю проект/src/Makefile.am как «SUBDIRS = lib_foo main», и он работает. Спасибо за вашу помощь, кстати, я не знаю, почему здесь голосует, это не я :( –