我的第一個問題在堆棧溢出!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:
一「項目/ 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
附: AC_COMPLIE_IFELSE用於判斷函數mistery_value()中的參數個數。我認爲這與錯誤無關。
二, 項目/ 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不應安裝,但只有編譯,所以我必須在lib_foo/Makefile.am使用「noinst_」。這就是爲什麼我被困在這裏。
任何答案,將不勝感激。 感謝您的幫助!
我可以知道爲什麼我得到的表決通過,這通常是一個習慣留下反饋:) –
嘿維森特,我已經解決了這個問題。問題是在project/src/Makefile.am中,我在「lib_foo」之前設置了子目錄「main」。所以make會在「lib_foo」之前處理「main」。但是,在src/main/main.c中,我需要使用由src/lib_foo/foo.c生成的「libfoo.a」。所以我修改project/src/Makefile.am就像「SUBDIRS = lib_foo main」,它可以工作。感謝您的幫助,順便說一下,我不知道爲什麼這裏有投票,這不是我:( –