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

Creative Commons License
本Blog采用 知識(shí)共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進(jìn)行許可。 —— Fox <游戲人生>

游戲人生

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

Autotools初體驗(yàn)

Posted on 2009-12-23 02:18 Fox 閱讀(6963) 評(píng)論(5)  編輯 收藏 引用 所屬分類(lèi): T技術(shù)碎語(yǔ)

本文同步自游戲人生

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


從接觸和使用make以來(lái),前前后后寫(xiě)了不少M(fèi)akefile(添添減減、修修補(bǔ)補(bǔ),累計(jì)上千行是有的),今天在重新整理代碼的組織結(jié)構(gòu)之后,突然就想:我為什么不使用Autotools呢?

在開(kāi)始體驗(yàn)功能強(qiáng)大的Autotools之前,簡(jiǎn)單(詳細(xì))回憶總結(jié)一下我使用make的經(jīng)歷和思考的過(guò)程,反省一下看看自己在接觸這些新鮮事物的時(shí)候到底走了多少?gòu)澛贰?/p>

o Cygwin

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

剛開(kāi)始的時(shí)候,就像大學(xué)剛接觸編程那樣,寫(xiě)“hello, world”,在終端用gcc命令直接編譯,然后開(kāi)始寫(xiě)最簡(jiǎn)單的只有一個(gè)all的Makefile。因?yàn)镋macs、GCC、make對(duì)我來(lái)說(shuō)都是嶄新的 工具,后面重心就不是放在寫(xiě)代碼上了,而是急于掌握他們,以求達(dá)到在Windows下的開(kāi)發(fā)效率。

去年11月底,當(dāng)時(shí)還沒(méi)有開(kāi)始用Cygwin,就買(mǎi)了一本《Managing Projects with GNU Make》,此時(shí)也算物盡其用了。慢慢開(kāi)始使用variables、macros、phony targets、functions,按步就班的系統(tǒng)學(xué)習(xí)應(yīng)用。

o Ubuntu

磨磨蹭蹭過(guò)了半年,其間因?yàn)槊χ厴I(yè),對(duì)Cygwin和Emacs、GCC、make也算比較熟悉了。

今年10月份,開(kāi)始使用Ubuntu,剛開(kāi)始在Windows下用wubi安裝,很快就直接用新的硬盤(pán)分區(qū)物理安裝,并隨著Ubuntu 9.10的發(fā)布,升級(jí)到了9.10

這前后寫(xiě)Makefile最大的區(qū)別就是,之前純粹是為了寫(xiě)而寫(xiě),之后是為了用而寫(xiě)。

隨著整個(gè)代碼結(jié)構(gòu)的不斷膨脹和修改,Makefile也不斷的變化。

Makefile自身的最大變化是從之前的因?yàn)榫帉?xiě)錯(cuò)誤、通用性差而不斷修改,演變到最后代碼增減不會(huì)影響Makefile,只是為了增加tags、優(yōu)化結(jié)構(gòu)而改動(dòng)。

經(jīng)歷了這個(gè)過(guò)程后,對(duì)于Makefile的結(jié)構(gòu)就比較熟悉了,而且可以從其他使用automake的項(xiàng)目的Makefile中學(xué)習(xí)借鑒了。


之所以想到使用autotools,是因?yàn)榻佑|的很多開(kāi)源項(xiàng)目的代碼都使用了這一組工具。

對(duì)于用戶而言,一般的項(xiàng)目編譯安裝的過(guò)程:

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

o configure:檢測(cè)系統(tǒng)平臺(tái)及軟硬件環(huán)境,確定適用本地環(huán)境的編譯策略,生成Makefiles;

o make:編譯、鏈接;

o make install:安裝;

o ldconfig:配置環(huán)境變量。

對(duì)于開(kāi)發(fā)者而言,則需要通過(guò)autoconf、automake為用戶組織起上面的過(guò)程:

Autoconf 流程
Autoconf 流程

對(duì)于這一流程,我的方法是照葫蘆畫(huà)瓢,參考OGRE等項(xiàng)目的相關(guān)文件和工具的GNU文檔。

寫(xiě)個(gè)Hello, Kitty。

操作的流程和期間出現(xiàn)的幾個(gè)問(wèn)題總結(jié)一下:

o cd project_dir:轉(zhuǎn)到項(xiàng)目目錄;

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])

# 這個(gè)是自動(dòng)生成的,因?yàn)榇a中沒(méi)有相關(guān)初始化信息,這里手動(dòng)修改一下,非必要
AC_INIT([CgFox], [0.0.1], [http://www.yulefox.com])

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

AC_CONFIG_SRCDIR([Hello.cpp])

o aclocal:生成aclocal.m4(太長(zhǎng)了,還沒(méi)去仔細(xì)了解)和autom4te.cache;

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

o automake --add-missing。

……


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

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

我去你大爺?shù)模?/p>

Feedback

# re: Autotools初體驗(yàn)[未登錄](méi)  回復(fù)  更多評(píng)論   

2009-12-23 08:15 by jacky
autotools用起來(lái)太繁瑣,OGRE已經(jīng)用cmake來(lái)構(gòu)建了,很好用。

# re: Autotools初體驗(yàn)  回復(fù)  更多評(píng)論   

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).
---------------------------
當(dāng)然這些問(wèn)題對(duì)于我不是必需的,不過(guò)還是等我autotools用一段時(shí)間再說(shuō):)

# re: Autotools初體驗(yàn)  回復(fù)  更多評(píng)論   

2009-12-24 10:31 by 飯中淹
這個(gè)相對(duì)于IDE來(lái)說(shuō),有什么優(yōu)勢(shì)?

# re: Autotools初體驗(yàn)  回復(fù)  更多評(píng)論   

2009-12-24 10:52 by Fox
@飯中淹
這套工具現(xiàn)在對(duì)于我更多的是一個(gè)學(xué)習(xí)和試驗(yàn),如果希望和別人交流和共同開(kāi)發(fā)跨平臺(tái)(尤其是non-win)的代碼的話,由于需要對(duì)依賴庫(kù)進(jìn)行檢測(cè),這個(gè)工作可以由autoconf+automake來(lái)完成。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美综合77777色婷婷| 久久激情婷婷| 国产精品专区一| 欧美日韩伊人| 国产精品国色综合久久| 欧美日韩美女一区二区| 欧美日韩综合| 国产精品免费看片| 国产精品自在在线| 在线观看日韩专区| 一区二区三区四区精品| 欧美亚洲一级片| 欧美大片91| 99精品欧美一区二区三区| 亚洲在线国产日韩欧美| 久久亚洲视频| 国产精品久久久久久影视| 极品尤物久久久av免费看| 99精品欧美一区| 久久久999成人| 亚洲精品国产系列| 午夜欧美不卡精品aaaaa| 老司机亚洲精品| 欧美先锋影音| 在线观看久久av| 亚洲午夜视频| 欧美电影免费观看高清完整版| 日韩小视频在线观看| 久久精品女人天堂| 国产精品第一区| 亚洲激情午夜| 欧美中文字幕精品| 国产精品久久久久99| 亚洲性视频h| 久久久激情视频| 欧美激情一区二区三区高清视频 | 久久久久久综合| 最新国产精品拍自在线播放| 亚洲欧美在线一区二区| 欧美精品日日鲁夜夜添| 在线成人黄色| 久久精品国产成人| 99精品国产一区二区青青牛奶| 久久精品亚洲热| 国产精品网站视频| 亚洲一区二区三区影院| 亚洲精品激情| 欧美成人按摩| 亚洲国产美女精品久久久久∴| 久久精品人人做人人爽| 亚洲一区二区在线免费观看| 欧美日韩国产页| 亚洲毛片播放| 亚洲国产美女| 欧美高清你懂得| 亚洲激情视频在线观看| 老司机精品视频网站| 欧美一级成年大片在线观看| 国产精品亚洲视频| 欧美一区二区三区四区夜夜大片| 一区二区欧美在线| 国产精品高潮呻吟久久av无限| 在线一区视频| 一区二区av| 国产精品jvid在线观看蜜臀| 亚洲一区二区在线免费观看视频 | 久久国产福利国产秒拍| 国产精品试看| 久久久久88色偷偷免费| 久久成人一区二区| 国产一区二区按摩在线观看| 欧美伊久线香蕉线新在线| 性欧美1819sex性高清| 国产在线欧美日韩| 欧美成人自拍| 欧美日韩1区| 亚洲欧美综合网| 欧美综合激情网| 亚洲激情影视| 99视频在线精品国自产拍免费观看| 欧美视频在线观看视频极品 | 性娇小13――14欧美| 亚洲欧美影院| 亚洲福利视频一区二区| 亚洲精品影视| 国产精品一区2区| 亚洲国产精品成人一区二区| 欧美激情一区二区三区不卡| 欧美国产精品va在线观看| 99这里有精品| 亚洲欧美视频在线观看视频| 狠狠久久综合婷婷不卡| 亚洲国产经典视频| 国产精品激情电影| 狂野欧美一区| 欧美激情一区二区久久久| 亚洲欧美一区二区精品久久久| 久久精品成人一区二区三区| 亚洲精品中文在线| 欧美一级欧美一级在线播放| 亚洲欧洲日韩在线| 亚洲欧美日韩成人高清在线一区| 亚洲国产精品美女| 亚洲欧美日韩在线播放| 亚洲精品欧美激情| 亚久久调教视频| 一区二区高清在线| 久久婷婷国产综合精品青草| 亚洲欧美日韩专区| 欧美久久久久免费| 欧美高清成人| 韩国三级在线一区| 亚洲一区二区网站| 在线视频欧美日韩精品| 欧美伊人久久| 亚洲欧美久久久| 欧美激情久久久久久| 久久一区二区三区四区| 国产精品va在线播放| 亚洲国产精品热久久| 在线电影一区| 欧美一区免费视频| 欧美一区二区三区视频免费播放| 欧美日韩另类视频| 亚洲精品视频在线看| 亚洲精品一区二区三区av| 老巨人导航500精品| 久久夜色撩人精品| 国产一区二区三区在线观看免费 | 西西人体一区二区| 亚洲女同精品视频| 欧美日韩一区自拍| 一本大道久久a久久综合婷婷| 亚洲精品美女久久久久| 美女性感视频久久久| 女主播福利一区| 一区二区三区中文在线观看| 欧美在线一级va免费观看| 久久精品夜色噜噜亚洲aⅴ| 国产九九精品| 欧美一区二区| 久久婷婷蜜乳一本欲蜜臀| 黄色日韩网站| 久久人人九九| 免费成人在线观看视频| 伊人影院久久| 久久影院午夜论| 亚洲福利视频三区| 亚洲女性裸体视频| 久久免费黄色| 久久青青草原一区二区| 国产精品永久入口久久久| 午夜精品福利视频| 久久久久久婷| 永久免费精品影视网站| 久久手机精品视频| 亚洲第一在线| 中文网丁香综合网| 国产精品美女黄网| 久久爱www.| 欧美激情综合| 亚洲一区二区精品| 国产亚洲欧美一区二区三区| 久久久久网址| 亚洲激情在线激情| 午夜激情久久久| 韩国一区二区三区在线观看| 另类激情亚洲| 宅男噜噜噜66一区二区| 另类春色校园亚洲| 夜夜嗨一区二区| 国产精品美女久久久久久2018 | 99精品久久久| 久久精品国产99| 亚洲欧洲日产国产网站| 国产精品国色综合久久| 久久九九热免费视频| 亚洲精品视频一区二区三区| 久久九九电影| 一区二区三区久久| 一区二区三区亚洲| 欧美性猛片xxxx免费看久爱| 久久久国产精品一区二区中文| 日韩视频一区二区三区| 久久免费偷拍视频| 亚洲一级特黄| 亚洲激情黄色| 国产视频久久久久久久| 欧美日韩国产黄| 久久午夜精品一区二区| 亚洲综合导航| 亚洲三级电影全部在线观看高清| 久久精品国产亚洲a| 亚洲视频免费在线| 亚洲高清资源综合久久精品| 国产伦精品一区二区三区照片91| 欧美国产一区二区在线观看 | 久久精品123| 亚洲无线观看| 日韩视频二区|