青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Creative Commons License
本Blog采用 知識共享署名-非商業性使用-禁止演繹 3.0 Unported許可協議 進行許可。 —— Fox <游戲人生>

游戲人生

游戲人生 != ( 人生 == 游戲 )
站點遷移至:http://www.yulefox.com。請訂閱本博的朋友將RSS修改為http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

Autotools初體驗

Posted on 2009-12-23 02:18 Fox 閱讀(6975) 評論(5)  編輯 收藏 引用 所屬分類: T技術碎語

本文同步自游戲人生

Writen by Fox(yulefox.at.gmail.com)


從接觸和使用make以來,前前后后寫了不少Makefile(添添減減、修修補補,累計上千行是有的),今天在重新整理代碼的組織結構之后,突然就想:我為什么不使用Autotools呢?

在開始體驗功能強大的Autotools之前,簡單(詳細)回憶總結一下我使用make的經歷和思考的過程,反省一下看看自己在接觸這些新鮮事物的時候到底走了多少彎路。

o Cygwin

今年3月份,拜Kevin Lynx所賜,每次對Linu淺嘗輒止的我終于下決心接觸了Cygwin環境,并一發不可收拾。

剛開始的時候,就像大學剛接觸編程那樣,寫“hello, world”,在終端用gcc命令直接編譯,然后開始寫最簡單的只有一個all的Makefile。因為Emacs、GCC、make對我來說都是嶄新的 工具,后面重心就不是放在寫代碼上了,而是急于掌握他們,以求達到在Windows下的開發效率。

去年11月底,當時還沒有開始用Cygwin,就買了一本《Managing Projects with GNU Make》,此時也算物盡其用了。慢慢開始使用variables、macros、phony targets、functions,按步就班的系統學習應用。

o Ubuntu

磨磨蹭蹭過了半年,其間因為忙著畢業,對Cygwin和Emacs、GCC、make也算比較熟悉了。

今年10月份,開始使用Ubuntu,剛開始在Windows下用wubi安裝,很快就直接用新的硬盤分區物理安裝,并隨著Ubuntu 9.10的發布,升級到了9.10

這前后寫Makefile最大的區別就是,之前純粹是為了寫而寫,之后是為了用而寫。

隨著整個代碼結構的不斷膨脹和修改,Makefile也不斷的變化。

Makefile自身的最大變化是從之前的因為編寫錯誤、通用性差而不斷修改,演變到最后代碼增減不會影響Makefile,只是為了增加tags、優化結構而改動。

經歷了這個過程后,對于Makefile的結構就比較熟悉了,而且可以從其他使用automake的項目的Makefile中學習借鑒了。


之所以想到使用autotools,是因為接觸的很多開源項目的代碼都使用了這一組工具。

對于用戶而言,一般的項目編譯安裝的過程:

o bootstrap:檢測autoconfautomakelibtool及其版本并完成初始化,生成configure;

o configure:檢測系統平臺及軟硬件環境,確定適用本地環境的編譯策略,生成Makefiles;

o make:編譯、鏈接;

o make install:安裝;

o ldconfig:配置環境變量。

對于開發者而言,則需要通過autoconf、automake為用戶組織起上面的過程:

Autoconf 流程
Autoconf 流程

對于這一流程,我的方法是照葫蘆畫瓢,參考OGRE等項目的相關文件和工具的GNU文檔。

寫個Hello, Kitty。

操作的流程和期間出現的幾個問題總結一下:

o cd project_dir:轉到項目目錄;

o emacs Hello.cpp

#include <iostream>

int main(int argc, char** argv)
{
std::cout << "Hello, Kitty!" << std::endl;
return 0;
}

o autoscan:生成configure.scan

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.64])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([Hello.cpp])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CXX

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT

o mv configure.scan configure.in:改名;

O emacs configure.in:編輯configure.in

AC_PREREQ([2.64])

# 這個是自動生成的,因為代碼中沒有相關初始化信息,這里手動修改一下,非必要
AC_INIT([CgFox], [0.0.1], [http://www.yulefox.com])

# 這個是必須的,否則無法生成aclocal.m4
AM_INIT_AUTOMAKE([CgFox], 0.0.1)

AC_CONFIG_SRCDIR([Hello.cpp])

o aclocal:生成aclocal.m4(太長了,還沒去仔細了解)和autom4te.cache;

o autoconf:生成configure(也很長,先不看);

o automake --add-missing。

……


本來想等明天(今天)弄完了再詳細整理一下。不過我沒有打算把這個東西搞成一篇教程。記下來更多的只是為了給自己留下一個lable,知道自己這幾天在做什么。

最近又是兩點左右睡。腦子里有個家伙告訴我這樣不好;另一個家伙告訴我他還不困;還一個家伙告訴我明天還要上班。

我去你大爺的!

Feedback

# re: Autotools初體驗[未登錄]  回復  更多評論   

2009-12-23 08:15 by jacky
autotools用起來太繁瑣,OGRE已經用cmake來構建了,很好用。

# re: Autotools初體驗  回復  更多評論   

2009-12-23 09:04 by Fox
In practice, CMake not only lacks a rich platform tests suite, compared to autoconf, it also lacks a lot of features from automake and libtool.

So why should you not switch an autotools-based project over to CMake?

Tedious
First and foremost, your configure.ac script may be large. Porting to CMake can be a time consuming and not so funnny task when it comes to the long tail.
iconv support missing
There are no standard tests for iconv(), neither for finding the compiler flags, nor whether it takes a const pointer.
pkg-config support broken
pkg-config support is reportedly broken as of cmake 2.4 patch 8.
Exported symbols list not implemented
There are no documented ways to specify the list of exported symbols for a shared libraries, so your libraries will unconditionnaly expose all their non-static APIs (libtool can use a flat list or a regular expression).
C99 compiler check missing
There is no built-in support to enable C99 support in the C compiler.
Objective-C flags not supported
You can add flags for the Objective-C compiler, but they propagate to C compilation as well.
Compiler feature checks missing
There are no built-in checks for any of the C99 features, such as variable-sized arrays, restricted pointers, macros with variable number of arguments, etc. nor for GCCisms.
Monolithic installation prefix
There is only one global installation prefix. So the typical Linux distro cannot set the global prefix to /usr while the system configuration (automake's sysconfdir) would be /etc. Very nice for "downstream" Linux packagers...
Installation paths hard-coding
As a consequence of the single prefix, you need to hard-code all paths from the prefix. Instead of ${docdir}, you need to hard-code ${prefix}/share/doc/${package} (${CMAKE_INSTALL_PREFIX}/share/doc/foobar in CMake parliance) and so on and so forth. BSD porters are going to have fun tweaking the paths manually...
Uninstallation not supported
There is sipport for uninstalling. That is a design choice. You'd better never ever try to install a package straight from the build tree, without a proper packaging system.
Installation testsuite not supported
Since there is no uninstallation, there is no of course no distcheck target either. How often did you get your source tarball right from the first attempt before a new release?
No cross-compilation
There is no documented support for cross-compilation. This is scheduled for a future release.
Limited documentation
Compared to autotools, the documentation feels a bit light. At least, there is a wiki, but that cannot replace a good offline reference.
Limited executable renaming
CMake is not quite as powerful as automake (with program-prefix, program-suffix and program-transform-name) when it comes to on-the-fly executable renaming. This little-known feature of automake can be extremely useful when building an operating system distribution with possibly conflicting executable names from different projects. For instance, it is very conveniant along with the Debian alternatives system.
No source tarball packaging
There is no built-in support for making a tarball (make dist). Some Version Control Systems can do it themselves (git does, Subversion does not). This is quite critical a feature for open-source projects.
No source tarball testing
As there is no replacement for make dist, there is no replacement for make distcheck either. From my not-so-humble experience, that is tremendously useful before doing a new release. (NOTE: when I write distcheck, I mean distcheck. I don't mean check which becomes test with CMake)
No gettext integration
Gettext is not supported. Targets for .po and .mo files must be added manually. Nevermind that this is the most widely used localization subsystem in the open-source community.
Awkward feature listing
Whereby ./configure --help gives the list of build option, cmake --help prints the CMake options only. Instead, it seems you have to run cmake in "interactive" mode and answer a question for each and every setting (much like Linux kernel make config).
---------------------------
當然這些問題對于我不是必需的,不過還是等我autotools用一段時間再說:)

# re: Autotools初體驗  回復  更多評論   

2009-12-24 10:31 by 飯中淹
這個相對于IDE來說,有什么優勢?

# re: Autotools初體驗  回復  更多評論   

2009-12-24 10:52 by Fox
@飯中淹
這套工具現在對于我更多的是一個學習和試驗,如果希望和別人交流和共同開發跨平臺(尤其是non-win)的代碼的話,由于需要對依賴庫進行檢測,這個工作可以由autoconf+automake來完成。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久se| 在线观看91久久久久久| 国产精品一卡| 亚洲激情在线| 性高湖久久久久久久久| 牛牛影视久久网| 一区二区高清在线观看| 久久午夜电影网| 国产精品视频专区| 亚洲人精品午夜| 久久久噜噜噜久久久| 99视频精品全国免费| 久久久亚洲国产天美传媒修理工| 欧美性色综合| 99av国产精品欲麻豆| 免费永久网站黄欧美| 久久国产日韩| 国产日韩精品久久久| 亚洲午夜一区| 亚洲欧洲日本一区二区三区| 欧美一区二区三区日韩| 最新国产成人av网站网址麻豆| 欧美高清视频一区二区| 亚洲国产va精品久久久不卡综合| 久久激情综合网| 亚洲一区二区三区免费视频 | 久久综合999| 亚洲综合视频一区| 国产精品激情偷乱一区二区∴| 日韩视频欧美视频| 欧美激情一区二区三区成人| 久久亚洲欧洲| 亚洲欧美另类国产| 亚洲亚洲精品在线观看 | 欧美成人精品在线播放| 亚洲第一网站| 亚洲电影观看| 欧美成人亚洲成人| 亚洲欧美在线高清| 亚洲欧美日韩专区| 国产亚洲女人久久久久毛片| 久久久久欧美| 国产精品jvid在线观看蜜臀| 亚洲第一福利视频| 国产一区二区欧美| 99在线精品观看| 最新国产拍偷乱拍精品| 欧美一区二区三区日韩| 影音先锋中文字幕一区| 亚洲欧美日韩在线高清直播| 亚洲图片欧洲图片日韩av| 夜夜嗨av一区二区三区| 亚洲欧洲午夜| 久久综合伊人77777| 日韩视频在线观看国产| 老司机午夜免费精品视频| 欧美在线精品一区| 久久噜噜噜精品国产亚洲综合 | 精品福利av| 亚洲精品久久视频| 国产美女精品一区二区三区| 日韩视频精品| 韩国女主播一区| 亚洲精品乱码| 亚洲精品少妇网址| 亚洲一区二区综合| 亚洲综合色婷婷| 久久久久国色av免费观看性色| 欧美一区在线视频| 国产精品美女主播| 欧美国产日韩一区二区三区| 伊人狠狠色j香婷婷综合| 久久se精品一区二区| 一本大道久久a久久精二百| 亚洲欧美在线网| 欧美在线综合| 国内精品国产成人| 99在线|亚洲一区二区| 亚洲一区三区在线观看| 国产精品毛片a∨一区二区三区| 亚洲视频电影在线| 亚洲精品一二区| 欧美日韩国产123| 欧美va天堂va视频va在线| 在线观看亚洲精品视频| 欧美va亚洲va香蕉在线| 欧美中文字幕在线| 韩国一区二区三区在线观看| 久久一二三区| 亚洲精品久久久久久久久| 亚洲一区二区精品在线| 国产欧美在线| 猫咪成人在线观看| 老色鬼精品视频在线观看播放| 国产精品成人免费| 欧美伊人久久| 亚洲国产精品va在线看黑人动漫 | 韩国精品主播一区二区在线观看| 久久综合色婷婷| 99精品欧美一区| 久久久久久久久综合| 91久久久在线| 国产精品不卡在线| 久久久久久亚洲精品不卡4k岛国| 亚洲精品乱码久久久久久黑人| 亚洲欧美日韩久久精品| 亚洲国产精品精华液网站| 欧美天天在线| 一本色道久久综合狠狠躁篇怎么玩| 欧美一区二区免费视频| 亚洲激情另类| 韩国福利一区| 国产精品视频不卡| 免费成人高清在线视频| 亚洲一区国产精品| 亚洲日本激情| 久久综合中文色婷婷| 午夜天堂精品久久久久| 最新国产乱人伦偷精品免费网站 | 欧美日韩精品欧美日韩精品一| 性色av一区二区怡红| 久久国产免费| 亚洲视频在线看| 亚洲激情在线视频| 狠狠色狠狠色综合日日小说| 国产精品激情电影| 欧美日韩国产限制| 欧美+亚洲+精品+三区| 欧美一区二区三区在线免费观看| 日韩视频在线永久播放| 欧美国产视频在线| 久热精品视频在线免费观看| 欧美在线视频网站| 亚洲一区二区三区国产| 一区二区激情视频| 国产乱码精品1区2区3区| 欧美日韩性生活视频| 亚洲欧美日韩中文播放| 一区二区三区视频在线观看| 亚洲黄色性网站| 亚洲高清视频在线| 欧美成人精品在线观看| 亚洲国产欧美一区二区三区同亚洲| 国产一区二区在线免费观看| 国产精品一区久久久| 国产精品久久久久久久久免费桃花| 欧美日韩激情网| 欧美揉bbbbb揉bbbbb| 欧美日韩精品综合| 欧美日韩国产成人在线91| 欧美经典一区二区三区| 欧美在线视频观看| 久久成人国产| 久久精品国产欧美亚洲人人爽| 久久不射网站| 免费国产自线拍一欧美视频| 久久琪琪电影院| 欧美成人精品福利| 欧美激情精品久久久久久大尺度| 欧美精品一区二区三区视频| 久久gogo国模裸体人体| 久久久亚洲高清| 欧美精品日韩| 国产精品v日韩精品v欧美精品网站| 国产精品亚洲综合色区韩国| 国产亚洲精品久久久久婷婷瑜伽| 国产一区二区三区久久久| 在线观看欧美亚洲| 日韩视频亚洲视频| 亚洲综合二区| 玖玖精品视频| 亚洲免费高清视频| 亚洲欧美日本国产专区一区| 久久精品国产清自在天天线| 欧美高清视频一区| 国产精品一区二区三区免费观看| 在线日韩视频| 亚洲一区二区在线免费观看视频| 久久久久久999| 亚洲欧洲综合另类| 欧美亚洲日本网站| 欧美1区视频| 国产农村妇女精品| 亚洲日本欧美天堂| 欧美怡红院视频| 亚洲电影免费观看高清完整版在线| 一区二区三区免费看| 久久免费观看视频| 国产精品国产三级国产专播精品人| 一区二区亚洲欧洲国产日韩| 一区二区三区产品免费精品久久75| 久久久久久久综合狠狠综合| 91久久精品国产91久久| 欧美亚洲在线观看| 欧美片在线播放| 亚洲二区视频在线| 性欧美超级视频| 亚洲精选国产| 亚洲私人影院在线观看| 嫩模写真一区二区三区三州|