ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(34)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

            test -z "$LDFLAGS" && LDFLAGS="-I/usr/include" AC_SUBST(LBFLAGS)
            dnl Tests for UNIX variants
            dnl
            AC_CANONICAL_HOST
            AC_CANONICAL_HOST報告從GNU觀點看到的宿主機類型.它輸出cpu-company-system形式的系統(tǒng) 名稱.例如,筆者的一個系統(tǒng)上,AC_CANONICAL_HOST報告其類型為i686-unknown-linux.
            dnl Tests for programs
            dnl
            AC_PROG_CC
            AC_PROG_LEX
            AC_PROG_AWK
            AC_PROG_YACC
            AC_CHECK_PROG(SHELL,bash,/bin/bash,/bin/sh)
          這一代碼段按順序判斷并設(shè)置了編譯器,詞法分析器lexer,awk,yacc以及本地shell.
            dnl Tests for libraries
            dnl
            AC_CHECK_LIB(socket, socket)
            AC_CHECK_LIB(resolv,res_init,[echo"res_init() not in libresolv"],
            [echo "res_init() found int libresolv"])
          "Test for libraries"的這一代碼段展示了怎么為autoconf的宏編寫自定義的命令.
            dnl Tests for header files
            dnl
            AC_CHECK_HEADER(killer.h)
            AC_CHECK_HEADERS([resolv.h temio.h curses.h sys/time.h fcntl.h \
            sys/fcntl. memory.h])
            AC_DECL_SYS_SIGLIST
            AC_HEADER_STDC
          以"\"結(jié)尾的一行說明了多參數(shù)續(xù)行的正確方式.前面已經(jīng)介紹過,使用字符"\"告訴m4和shell需要續(xù)行,并且用m4的引用符號把整個參數(shù)括起來.
            dnl Tests for typedefs
            dnl
            AC_TYPE_GETGROUPS
            AC_TYPE_SIZE_T
            AC_TYPE_PID_T

            dnl Tests for structures
            AC_HEADER_TIME
            AC_STRUCT_TIMEZONE
            dnl Tests of compiler behavior
            dnl
            AC_C_BIGENDIAN
            AC_C_INLINE
            AC_CHECK_SIZEOF(int, 32)
          AC_C_BIGENDIAN宏將產(chǎn)生一個警告,因為調(diào)用AC_TRY_RUN時沒有設(shè)置默認值以允許交叉編譯,可以忽略這個警告.
            dnl Tests for library functions
            dnl
            AC_FUNC_GETLOADAVG
            AC_FUNC_MMAP
            AC_FUNC_UTIME_NULL
            AC_FUNC_VFORK
            dnl Tests of system services
            dnl
            AC_SYS_INTERPRETER
            AC_PATH_X
            AC_SYS_RESTARTABLE_SYSCALL
          AC_SYS_RESTARTABLE_SYSCALLS宏將產(chǎn)生一個警告,因為調(diào)用AC_TRY_RUN時沒有默認值允許交叉編譯,可以忽略這個警告.
            dnl Tests in this section exercise a few of `autoconf' ''s generic macros
            dnl
            dnl First, let's see if we have a usable void pointer type
            dnl
            AC_MSG_CHECKING(for a usable void pointer type)
          現(xiàn)在情況開始變得有趣起來.基本上,普通宏允許你通過編寫自己的宏對autoconf進行擴展.例如,AC_MSG_CHECKING在屏幕上打印字符串"checking",隨后是一個空格以及傳入的參數(shù)
            AC_TRY_COMPILE( [ ],
                [ char *ptr;
                void *xmalloc();
                ptr = (char *) xmalloc(1);
                ],
                [AC_DEFINE(HAVE_VOID_POINTER) AC_MSG_RESULT(usable void pointer] )
          留意AC_TRY_COMPILE宏.autoconf能夠把C代碼嵌入到一個C程序框架中,并把這個程序?qū)懭胍焉傻腸onfigure腳本中,以便在 運行configure時編譯這個程序;然后,configure捕獲編譯器的輸出并查找錯誤.AC_DEFINE (HAVE_VOID_POINTER)產(chǎn)生了一個名為HAVE_VOID_POINTER的預(yù)處理器符號(必須將它放置在./acconfig.h中, 因為它并不在其他地方存在).如果編譯成功,configure把"#define HAVE_VOID_POINTER 1"寫入到config.h中并且在屏幕上打印"usable void pointer";如果編譯失敗則在config.h中寫入"/* #undef HAVE_VOID_POINTER */,并顯示"no usable void pointer".在你自己的源代碼文件中,只需按如下的方式測試這個預(yù)處理符號:
            #ifdef HAVE_VOID_POINTER
            /* do something */
            #else
            /* do something else */
            #endif
            dnl Now, let's exercises the preprocessor
            dnl
            AC_TRY_CPP(math.h, echo 'found math.h', echo 'no math.h - deep doo doo!)
          如果configure找到了頭文件math.h,它會在屏幕上顯示"found math.h";否則它通知用戶出現(xiàn)了一個問題.
            dnl Next, we test the linker
            dnl
            AC_TRY_LINK([#ifndef HAVE_UNISTD_H
            #include <signal.h>
            #endif],
            [char *ret = *(sys_siglist + 1);],
            [AC_DEFINE(HAVE_SYS_SIGLIST), AC_MSG_RESULT(got sys_siglist)],
            [AC_MSG_RESULT(no sys_siglist)])
          這一段代碼測試連接器.同樣,因為HAVE_SYS_SIGLIST不是一個標準預(yù)處理器符合,你必須在./acconfig.h中聲明它.
            dnl Finally, set a default value for a ridiculous type
            dnl
            AC_CHECK_TYPE(short_short_t, unsigned short)
          最后的測試只檢查一種(希望的)不存在C數(shù)據(jù)類型.如果確實沒有,則將short_short_t定義為unsigned short.讀者可以到config.h中查找與short_short_t相關(guān)的#define指令來確認這個測試的結(jié)果.
          posted on 2005-08-04 21:17 ivaneeo 閱讀(571) 評論(0)  編輯  收藏 所屬分類: GNU牛力
          主站蜘蛛池模板: 临泉县| 罗平县| 上杭县| 托克托县| 唐山市| 麦盖提县| 龙游县| 长宁县| 新闻| 上高县| 遵义市| 苍溪县| 博湖县| 高雄市| 肇源县| 井陉县| 岚皋县| 凤山县| 保康县| 岢岚县| 同德县| 化州市| 大田县| 循化| 镇宁| 清水县| 南华县| 吉水县| 同仁县| 临沂市| 轮台县| 桓台县| 保山市| 邢台县| 安福县| 罗山县| 中江县| 甘泉县| 琼中| 沽源县| 四平市|