當我從「./configure」管理的項目中移除一些子目錄時,它會嘗試去找一些「../../configure.ac」等東西,而且不容易構建。如何提取部分基於GNU Build System的項目?
如何提取部分此類項目並使其獨立?
當我從「./configure」管理的項目中移除一些子目錄時,它會嘗試去找一些「../../configure.ac」等東西,而且不容易構建。如何提取部分基於GNU Build System的項目?
如何提取部分此類項目並使其獨立?
有兩種方法可以解決這個問題,創建一個單獨的自動工具構建過程,或者廢除自動工具和手動代碼,或者創建一個新的Makefile
。
myprojectfoo | +-- src | +-- man | +-- messages | +-- lib | +-- include | +-- others
看一看上面的圖示中,名爲myprojectfoo
一個虛構項目,並使用自動工具來建立一個名爲foo
二進制文件。頂級目錄即myprojectfoo
將有configure.ac,Makefile.am和Makefile.in,在子目錄中會有至少Makefile.am和Makefile.in。自動工具將創建並執行make命令來構建項目。現在
,從什麼,我理解你正在嘗試做的事:
myprojectfoo | \/ +-- sXc | /\ +-- man | +-- messages | +-- lib | \/ +-- incXude | /\ +-- others
你要拿出src
子目錄和它的include's
也。那麼在這種情況下,創建一個單獨的Makefile將更容易(讀取-沒有自動工具)構建..在這種情況下,它會更容易。
我能想到的是最好的方法,你將不得不做出這樣的決定最終有多大是要提取,一旦你繼續與該項目的源代碼的子集,刪除所有引用Makefile.am,Makefile.in ...並借用現有的簡單的Makefile模板來構建它並調用它像這樣
make -f MyMakefile
OR
如果你想建立使用該子集使用自動工具一個單獨的項目:
Makefile.am
,如下圖所示。configure.ac
,如下圖所示...configure.ac
configure.ac
,運行autoreconf後,將執行的automake,的autoconf等配套汽車修理工具程序。服用Makefile.am
用於Linux的樣本...
SUBDIRS = src include ACLOCAL_AMFLAGS = -I m4
服用configure.ac
用於Linux的樣本...
AC_PREREQ(2.63) AC_INIT([mysubsetprojectfoo], [0.1a], [[email protected]]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([-Wall -Werror]) AM_GNU_GETTEXT_VERSION([0.17]) AM_GNU_GETTEXT([external]) AM_CFLAGS= # Checks for programs. AC_HEADER_STDC AC_PROG_CC AC_ARG_ENABLE([debug], [ --enable-debug Turn on debugging], [case "${enableval}" in yes) debug=true ;; no) debug=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;; esac],[debug=false]) AM_CONDITIONAL([DEBUG], [test x$debug = xtrue]) # Checks for libraries. AC_CHECK_LIB([mylib], [mylib_function], [:]) if test "$mylib" = :; then AC_MSG_ERROR([MyLib is missing.\ This can be downloaded from 'http://www.foo.baz']) fi AC_CONFIG_HEADERS([config.h]) # Checks for header files. # FROM running 'autoscan' on the source directory AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h locale.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h syslog.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_INLINE AC_C_CONST AC_TYPE_SIGNAL AC_TYPE_PID_T AC_TYPE_UID_T AC_TYPE_SIZE_T # Checks for library functions. AC_FUNC_FORK AC_FUNC_MALLOC AC_CHECK_FUNCS([atexit inet_ntoa memset regcomp socket strdup strerror]) AC_CONFIG_FILES([Makefile src/Makefile include/Makefile]) AC_OUTPUT
的自動工具的命令,是我的頭頂,我可能錯過了一些東西..可以通過在這篇文章的底部對此發表評論,並且會相應地進行修改。
太複雜了......我剛剛結束了複製整個項目,並從「./configure」腳本中刪除部分,這些腳本抱怨丟失的東西。 我想從大事物中提取小補充程序。它也有額外的不需要的依賴。 – 2010-05-24 17:52:15
我認爲可能有一件事情會分析makefiles(因爲autotools這麼大),並找到用於構建給定目標的源文件的子集。 – 2010-05-24 17:54:41
而不是直接運行automake和autoconf(並忘記運行aclocal,autoheader,libtoolize等),它更容易運行autoreconf。這將以正確的順序調用所有必需的自動工具。 – 2010-05-25 07:00:16