naobe @ ウィキ

apache2.4.2のMakefile

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可
Apache2.4.2に戻る
[[Makefile]]
     SUBDIRS = srclib os server modules support   サブディレクトリィ
     PROGRAM_NAME         = $(progname)
     
     include $(top_builddir)/build/rules.mk
     include $(top_srcdir)/build/program.mk

     PROGRAM_LDADD        = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(PCRE_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
                                                            -export-dynamic                                                    なし             confi g_vars.mk参照
                                                                         以下参照                                                              なし
     PROGRAM_SOURCES      = modules.c

     PROGRAM_PRELINK      = $(COMPILE) -c $(top_srcdir)/server/buildmark.c
          
     PROGRAM_DEPENDENCIES = \
            server/libmain.la \
            $(BUILTIN_LIBS) \
               config_vars.mk参照
            $(MPM_LIB) \
            os/$(OS_DIR)/libos.la

     TARGETS         = $(sbin_PROGRAMS) $(shared_build) $(other_targets)
           httpd                   shared-build                   

$(top_builddir)/build/rules.mk
     ALL_CFLAGS   = $(EXTRA_CFLAGS) $(NOTEST_CFLAGS) $(CFLAGS)
     ALL_LDFLAGS  = $(EXTRA_LDFLAGS) $(NOTEST_LDFLAGS) $(LDFLAGS)
                              -Wl,--enable-auto-import,--subsystem,console

     BASE_CC  = $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(ALL_INCLUDES)
     COMPILE      = $(BASE_CC)
     SH_COMPILE     = $(LIBTOOL) -- mode =compile $(BASE_CC) -prefer-pic -c $< && touch $@ 共有ライブラリ用のlibtoolコンパイル
     LT_COMPILE     = $(LIBTOOL) --mode=compile $(COMPILE) -prefer-non-pic -static -c $< && touch $@    static用のlibtoolコンパイル 

     include  $(top_builddir)/build/config_vars.mk

     all: all-recursive   ここが最初のターゲット
     all-recursive install-recursive depend-recursive:
        @otarget=`echo $@|[[sed]] s/-recursive//`; \   ターゲットから'-recursive'を除く
        list=' $(BUILD_SUBDIRS) $(SUBDIRS)'; \
        for i in $$list; do \
            if test -d "$$i"; then \
                target="$$otarget"; \
                echo "Making $$target in $$i"; \
                if test "$$i" = "."; then \
                        made_local=yes; \
                        target="local-$$target"; \
                fi; \
                (cd $$i && $(MAKE) $$target) || exit 1; \ サブディレクトリに移動してmake allを実行
            fi; \
        done; \
        if test "$$otarget" = "all" && test -z '$(TARGETS)'; then \
            made_local=yes; \
        fi; \
        if test "$$made_local" != "yes"; then \
            $(MAKE) "local-$$otarget" || exit 1; \   ローカルターゲットを作成する
        fi

     shared-build-recursive:
          @if test `pwd` = "$(top_builddir)"; then \
              $(PRE_SHARED_CMDS) ; \
          fi; \
          list='$(SUBDIRS)'; for i in $$list; do \
              target="shared-build"; \
              if test "$$i" = "."; then \
               made_local=yes; \
               target="local-shared-build"; \
              fi; \
              if test "$$i" != "srclib"; then \
               (cd $$i && $(MAKE) $$target) || exit 1; \  サブディレクトリに移動してmake shared-buildを実行
              fi; \
          done; \
          if test -f 'modules.mk'; then \
              if test -n '$(SHARED_TARGETS)'; then \
               echo "Building shared: $(SHARED_TARGETS)"; \
               if test "$$made_local" != "yes"; then \
                    $(MAKE) "local-shared-build" || exit 1; \
               fi; \
              fi; \
          fi; \
          if test `pwd` = "$(top_builddir)"; then \
               $(POST_SHARED_CMDS) ; \
          fi

     local-all: $(TARGETS)
     shared-build: shared-build-recursive
     LINK     = $(LIBTOOL) --mode=link $(CC) $(ALL_CFLAGS)  $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@ 
                                                                   -g -O2 -pthread なし
                                                                                                                  -Wl,--enable-auto-import,--subsyste m,console 
  SH_LINK  = $(SH_LIBTOOL) -- mode=link $(CC) $(ALL_CFLAGS) $(LT_LDFLAGS) $(ALL_LDFLAGS) $(SH_LDFLAGS) $(CORE_IMPLIB) $(SH_LIBS) -o $@
              $(LIBTOOL)と同じ                                                             なし          なし            なし
  MOD_LINK = $(LIBTOOL) -- mode=link $(CC) $(ALL_CFLAGS) -static $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@


     .c.lo:                         server (7)
          $(LT_COMPILE)     serverの場合はstaticでコンパイルする


$(top_srcdir)/build/program.mk
     PROGRAM_OBJECTS = $(PROGRAM_SOURCES:.c=.lo)
                                        modules.c

     $(PROGRAM_NAME): $(PROGRAM_DEPENDENCIES) $(PROGRAM_OBJECTS)    ライブラリがhttpdより新しければ、リンクを実行する
        httpd
          $(PROGRAM_PRELINK)
          $(LINK) $(PROGRAM_LDFLAGS) $(PROGRAM_OBJECTS) $(PROGRAM_LDADD) ライブラリをリンクしてターゲット作成
                        なし                             module.o                   rootのMakefile参照     

$(top_builddir)/build/config_vars.mk     
     progname = httpd
     LIBTOOL = /home/suna/download/apache/2.4.2/httpd-2.4.2/srclib/apr/libtool $(LTFLAGS)
                    LIBTOOLは専用のものを使っている。
     LTFLAGS = --silent
     LDFLAGS =
     HTTPD_LDFLAGS = -export-dynamic
     PCRE_LIBS = -L/usr/local/lib -lpcre
     EXTRA_LIBS =
     EXTRA_CFLAGS = -g -O2 -pthread
     EXTRA_LDFLAGS = -Wl,--enable-auto-import,--subsystem,console
     NOTEST_CFLAGS =
     CC = gcc -std=gnu99
     CFLAGS =
     AP_LIBS = $(MOD_SO_LDADD) $(MOD_[[HTTP]]_LDADD) $(MOD_MPM_EVENT_LDADD) /home/suna/download/apache/2.4.2/httpd-2.4.2/srclib/apr-util/libaprutil-1.la  -lexpat           /home/suna/download/apache/2.4.2/httpd-2.4.2/srclib/apr/libapr-1.la -luuid -lrt -lcrypt -lpthread -ldl
         -lexpat : XMLパーサ
         -lrt : 非同期I/Oなどのリアルタイムライブラリ
         -luuid: DCE 互換の Universally Unique Idenifier ライブラリ  
         -ldl: ダイナミックリンクライブラリ

     MOD_SO_LDADD =
     SSL_LIBS = -L/usr/kerberos/lib -lssl -lcrypto -luuid -lrt -lcrypt -lpthread -ldl
     MOD_SSL_LDADD = $(SSL_LIBS) -export-symbols-regex ssl_module
     MOD_HTTP_LDADD =
     MOD_MPM_EVENT_LDADD =
     LIBS =
     OS_DIR = unix
     BUILTIN_LIBS = modules/core/libmod_so.la modules/http/libmod_http.la
     shared_build = shared-build
     other_targets =
     MPM_LIB = server/mpm/winnt/libwinnt.la

server/Makefile
     SUBDIRS = mpm
     LTLIBRARY_NAME    = libmain.la
     LTLIBRARY_DEPENDENCIES = test_char.h
     LTLIBRARY_SOURCES = \
           config.c log.c main.c vhost.c util.c \
           util_script.c util_md5.c util_cfgtree.c util_ebcdic.c util_time.c \
           util_filter.c util_pcre.c util_regex.c exports.c \                    exports.cがここにある
          ・・・
     TARGETS = delete-exports $(LTLIBRARY_NAME) $(CORE_IMPLIB_FILE) export_vars.h httpd.exp
               (3)             (5)
     include $(top_builddir) /build/rules.mk
          mpmディレクトリへ移動して、make all (0)
          $(MAKE) "local-all"    (1) 
          local-all: $(TARGETS)  (2)
     include $(top_srcdir) /build/library.mk
          LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X)     

          $(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES)  (6)
            libmain.laより、オブジェクト(config.lo, log.lo ...)が新しければ、以下の行を実行
                 $(LINK) -static $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD)    オブジェクトをstaticリンクしてlibmain.aを作成
                ここにターゲットがある                                                               なし

     delete-exports: (4)
      @if test -f exports.c; then \
          if test -f export_files; then \
              files=`cat export_files`; \
              headers="`find $$files -newer exports.c`"; \  export_filesから、exports.cより新しいファイルを返す
              if test -n "$$headers"; then \
                 echo Found newer headers. Will rebuild exports.c.; \
                 echo rm -f exports.c export_files; \
                 rm -f exports.c export_files; \
              fi; \
          else \
              rm -f exports.c; \
          fi; \
      fi

    exports.c: export_files (8)   export_filesからexports.cを作成する(ヘッダファイルから、関数を取り出して出力)
       $(AWK) -f $(top_srcdir) /build/make_exports.[[awk]] `cat $?` > $@

    export_files: (9) export_filesを作成する
      ( for dir in $(EXPORT_DIRS) ; do \
            ls $$ dir /*.h ; \
        done; \
        for dir in $(EXPORT_DIRS_APR) ; do \
            ls $$ dir /ap[ru].h $$dir /ap[ru]_*.h 2>/dev/null; \
        done; \
      ) | sort -u > $@


modules/ssl/Makefile  ダイナミックリンクライブラリ
     include $(top_srcdir)/build/special.mk
          all: all-recursive

     include $(builddir) /modules.mk
               mod_ssl.la: mod_ssl.slo ssl_engine_config.slo ssl_engine_dh.slo ssl_engine_init.slo ssl_engine_io.slo ssl_engine_kernel.slo ssl_engine _log.slo ssl_engine_mutex.slo ssl_engine_pphrase.slo ssl_engine_rand.slo ssl_engine_vars.slo ssl_scache.slo ssl_util_stapling.slo ssl_util.slo ssl_ut il_ssl.slo ssl_engine_ocsp.slo ssl_util_ocsp.slo
                       $(SH_LINK) -rpath $(libexecdir) -module -avoid-version  mod_ssl.lo ssl_engine_config.lo ssl_engine_dh.lo ssl_engine_init.lo ss l_engine_io.lo ssl_engine_kernel.lo ssl_engine_log.lo ssl_engine_mutex.lo ssl_engine_pphrase.lo ssl_engine_rand.lo ssl_engine_vars.lo ssl_scache.lo s sl_util_stapling.lo ssl_util.lo ssl_util_ssl.lo ssl_engine_ocsp.lo ssl_util_ocsp.lo  $(MOD_SSL_LDADD)
                         オブジェクトをリンクしてmod_ssl.laを作成する

               DISTCLEAN_TARGETS = modules.mk
               static =
               shared =  mod_ssl.la
ウィキ募集バナー