私の最初の質問はスタックオーバーフローです!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. AC_COMPLIE_IFELSEは関数mistery_value()内のパラメータの数を判断するために使用されます。私はそれがエラーとは関係ないと思う。
II。 プロジェクト/ Makefile.am:
SUBDIRS = main lib_foo
III。メインプロジェクト//
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 Makefile.am
。 プロジェクト/ lib_foo/Makefile.amnoinst_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_'を使う必要があります。だからこそ私はここにこだわる。
ご回答いただければ幸いです。 ご協力いただきありがとうございます!
私はなぜ落選したのか分かりますが、フィードバックを残すのは普通の習慣です:) –
こんにちはビセンテ、私はこれを解決しました。問題は、プロジェクト/ src/Makefile.amで、 "lib_foo"の前にサブディレクトリ "main"を設定していることです。だからmakeは "main"を "lib_foo"の前で扱います。しかし、問題はsrc/main/main.cです。src/lib_foo/foo.cによって生成される "libfoo.a"を使う必要があります。だから私は "SUBDIRS = lib_foo main"のようにproject/src/Makefile.amを変更して動作します。あなたの助けてくれてありがとう、私はここにダウン投票があるのか分からないように、それは私ではない:( –