سؤال

هدفي هو أن يكون كل كائن الملفات التي بنيت في .objs الدليل بدلا من جذر Makefile, وأن يكون الثنائيات (و المكتبات) نسخها إلى المشروع بن/ الدليل.ولكن كنت غير قادر على العثور على أي موارد لشرح كيفية القيام بذلك.كيف لي أن أفعل هذا ؟

هنا هو بلدي تكوين.ac src/Makefile.am - لدي مماثلة Makefile.هل الملفات اثنين من المكتبات المشتركة التي يتم الرجوع إليها.أنها ترجمة ، بعد نسخها إلى بن/ دليل العمل كما ينبغي.أنا فقط أبحث لأتمتة هذه العملية.

تكوين.ac

AC_PREREQ([2.63])
AC_INIT([gtkworkbook], [0.12], [j_bellone@users.sourceforge.net])
AC_CONFIG_SRCDIR([gtkworkbook/cell.c])
AM_INIT_AUTOMAKE([gtkworkbook], [0.12])

# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_PROG_LIBTOOL
AC_PROG_CC_C_O

AC_CHECK_LIB([pthread], [pthread_mutex_init], [], [
            echo "pthread library is missing. pthread is required for this program"
            exit -1])

# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T

# Checks for library functions.
AC_CHECK_FUNCS([gethostbyname memset socket])

AC_OUTPUT([Makefile
       csv/Makefile
       gtkworkbook/Makefile
       src/Makefile])

src/Makefile.am

AUTOMAKE_OPTIONS= foreign

C_FLAGS= -I/usr/local/include -I/usr/include -I/usr/local/include/gtkextra-2.0 -I$(top_srcdir)/include `pkg-config gtk+-2.0 glib-2.0 --cflags`
L_FLAGS= -L/usr/local/lib -L/usr/lib -L$(top_srcdir)/lib `pkg-config gtk+-2.0 glib-2.0 --libs` -lgtkextra-x11-2.0

bin_PROGRAMS= gtkworkbook
gtkworkbook_SOURCES= application.c config.c main.c parse.c plugin.c
gtkworkbook_CFLAGS= -Wall -lgthread-2.0 -std=c99 $(C_FLAGS)  
gtkworkbook_LFLAGS= -ldl $(L_FLAGS)
gtkworkbook_LDFLAGS= $(L_FLAGS)
gtkworkbook_LDADD= ../gtkworkbook/libgtkworkbook.la ../csv/libcsv.la

lib_LTLIBRARIES= realtime.la
realtime_la_SOURCES= realtime/CsvParser.cpp realtime/Network.cpp realtime/Packet.cpp realtime/plugin_main.cpp \
    realtime/thread_main.cpp realtime/concurrent/Mutex.cpp realtime/concurrent/Semaphore.cpp \
    realtime/concurrent/Thread.cpp realtime/concurrent/ThreadGroup.cpp realtime/concurrent/ThreadPool.cpp \
    realtime/proactor/Dispatcher.cpp realtime/proactor/Event.cpp realtime/proactor/Proactor.cpp \
    realtime/proactor/InputDispatcher.cpp realtime/proactor/Worker.cpp realtime/network/Tcp.cpp
realtime_la_CPPFLAGS= -Wall -Wno-write-strings $(C_FLAGS)
realtime_la_LFLAGS= -lgtkworkbook -lcsv $(L_FLAGS)
realtime_la_LDFLAGS= -module -export-dynamic 
realtime_la_LIBADD= ../gtkworkbook/libgtkworkbook.la ../csv/libcsv.la

لذا سؤالي هو كيفية تحديد الناتج الدلائل عن تجميع نتائج كل Makefile (أتمنى لهم ليتم نسخها إلى بن/, و ملفات الكائن في .الكائنات كل مشروع بدلا من جذر Makefile.

شكرا للمساعدة حتى الآن..هذا الموقع لديه مصدر عظيم, ولقد تعلمت الكثير من الروابط الموجودة بالفعل.

هل كانت مفيدة؟

المحلول

غنو بناء نظام لا يستخدم obj/ الدلائل ، لذلك autotools ليست مصممة لدعم ذلك.

ومع ذلك أستطيع أن أفكر في اثنين من الطرق للتغلب على هذه.

كما المثبت, يمكنك بناء أي حزمة من الدليل المصدر عن طريق كتابة

mkdir builddir
cd builddir
../path-to-sourcedir/configure
make

ثم أي ملف الإخراج سيتم إنشاؤها في builddir/ الدليل.هذا تجميع نظام يجعل من الممكن ترجمة التعليمات البرمجية المصدر الخروج المخزنة في دليل للقراءة فقط (هذا معنى اكثر مرة أخرى في سنوات حيث FSF تم توزيع أقراص مدمجة مع غير مضغوط البرمجية المصدر) أو تجميع نفس المصدر مع مختلف إعدادات (أو حتى على أبنية مختلفة).

مثل رابط, الطريقة الوحيدة التي يمكن أن تجبر الحزمة الخاصة بك لبناء كل شيء في obj/ وضع الخاص بك Makefile.am في obj/, و أعلن كل ما تبذلونه من بناء قواعد هناك.هذا يعني obj/Makefile.am يبحث مثل:

bin_PROGRAMS = foo bar
foo_SOURCES = ../src/foo/main.c ../src/foo/help.c ../src/foo/list.c
bar_SOURCES = ../src/bar/bar.c 

الخ.أتذكر أنه قبل 10 سنوات, تطرح, نظام التشغيل بالم المحاكي ، باستخدام إعداد مثل المذكورة أعلاه.أنا لا أوصي به كما انها ليست حقا للصيانة.انها حقا من الأفضل أن العصا مع فلسفة وأدوات تستخدم في بناء النظم التي تعمل مثل غيرها من حزم غنو.

للحصول على مقدمة إلى جنو بناء نظام أوصي قراءة مقدمة من Automake دليل:http://www.gnu.org/software/automake/manual/automake.html#GNU-Build-System

وخاصة حالات الاستخدام القسم.إذا كنت لا تهتم حول هذه الحالات ، أعتقد أن الأفضل هو عدم استخدام Automake, وبناء الخاصة بك Makefiles.وإلا سوف تحاول الحفاظ على قوة Automake تفعل شيئا ليس من تصميم و عليك بسرعة أكره ذلك.

تحرير 2013-08-26:علما أن Automake المشروع باستخدام مسمى باستخدام obj/ ليس المحمولة إلى BSD جعل.

نصائح أخرى

أسهل طريقة للقيام بذلك أن مجموعة "libdir" إلى الدليل الذي تريد هذه الملفات في نهاية المطاف في استخدام تثبيت الهدف نسخ لهم هناك.

هذا سوف تمنعك من استخدام تثبيت الهدف بالمعنى التقليدي على الرغم من.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top