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

馭風萬里無垠

轉換autoconf的配置文件為CMake配置文件

不少現存的第三方開源程序是用autotools來組織的,將其加入到CMake的代碼里的時候,有個麻煩的問題是,makefile的更新會產生不一致,尤其是./configure腳本的執行速度實在不敢恭維,當然希望往Windows上移植的話,是另外一個大問題了。

對于源代碼比較少的程序,基本可以通過比照config.h的內容,類比造出一個CMake風格的配置文件,然后利用下述命令:
configure_file(config.h.in config.h)
這個方法可行的根源在于,CMake提供了類似的機制來進行跨平臺的檢測,具體來說是如下幾個Module:

CheckFunctionExists
CheckIncludeFile
CheckIncludeFileCXX
CheckIncludeFiles
CheckLibraryExists
CheckStructHasMember
CheckSymbolExists
CheckTypeSize
CheckVariableExists
< /div> 對于大部分簡單的config.h,CheckIncludeFile/CheckIncludeFiles/CheckLibraryExists /CheckFunctionExists就足夠了。
需要的工作是,手工寫一個config.h.in,另外加一個 Detect.cmake,在config.h.in里邊,將對應的聲明變化cmakedefine,在Detect.cmake里邊,加上查找對應 macro的方法.

  • 頭文件
/*Define to 1 if you have <netinet/in.h>*/
#define HAVE_NET_INET_IN_H 1

對應的聲明分別為:
//config.h.in
#cmakedefine HAVE_NET_INET_IN_H

//detect.cmake
INCLUDE(CheckIncludeFile)
CHECK_INCLUDE_FILE(netinet
/in.h HAVE_NET_INET_IN_H)



其內部的工作機制為:根據宏參數構造一個基本的C文件,然后用CC編譯看是否有錯誤,如果沒有,則定義上述符號(HAVE_XXX_H),否則,undefine
.

對于某些系統頭文件而言,可能頭文件自身是不完備的(依賴于其他的頭文件),此時需要按照依賴順序寫出對應的頭文件序列:
/*Define to 1 if you have xxx/yyy.h */
#define HAVE_XXX_YYY_H
//detect.cmake
INCLUDE(CheckIncludeFiles)
CHECK_INCLUDE_FILES(
"dir1/top1.h;dir2/top2.h;xxx/yyy.h" HAVE_XXX_YYY_H)

  • 庫檢測已經查找庫中的某一個函數
對于檢查庫存在與否的情況,則稍微有些復雜,config.h通常會如下(autoconf的情況):
/*Define to 1 if you have the library `xxx'*/
#define HAVE_LIBXXX對應的定義部分即config.h.in

沒有太大差異,照樣cmakedefine即可。

對于detect.cmake,需要指明lib中的一個函數:
INCLUDE(CheckLibraryExists)
find_libaray(libloc libname)
#Get the library directory
string(REGEX REPLACE ".*/(.*)" "\\1" libloc ${libloc})
CHECK_LIBRARY_EXISTS(XXX fun_in_lib ${libloc} HAVE_LIBXXX)

上述方法可以很檢測某個庫中是否包含某個需要的函數,只有找到的情況下,才定義對應的宏。

如果只需要知道庫是否存在,只需要根據find_library的結果即可:
find_libaray(libloc xxx)
if (libloc)
   
set(HAVE_LIBXXX 1)
endif()
  • 函數
函數的處理方法則相對簡單,只需要如下的cmake代碼即可:
INCLUDE(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(testfunc HAVE_TEST_FUNC)

  • 調試
上述代碼可能在某些情況下不能正常工作,或者你不知道需要怎樣去填入里邊的信息(比如多頭文件依賴順序的問題),那么可以自己手工模擬對應CMake模塊的工作方法,自己造一個C文件來編譯,看看缺少哪些頭文件或者鏈接庫。
  • Automation?
如果手邊有現成的autotools生成的config.h,并且這個文件比較大,手工一一改動有些太繁瑣。注意到autoconf 生成的config.h文件有某些特征,用腳本來做某些自動化轉換是可能的,一個可行的思路是,通過正則表達式匹配來檢測注釋,從而可以得出接下來的宏聲明是頭文件還是庫、函數等,由于宏命名的規律性,可以很容易的推導出對應的頭文件名或者函數名。

在我自己實驗的一個例子中,用100行的python腳本可以轉換得到200個可以正常工作的cmake代碼和 config.h.in。

posted on 2009-09-20 21:10 skyscribe 閱讀(2237) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

導航

統計

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            曰韩精品一区二区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲大胆女人| 韩国精品一区二区三区| 国产一区日韩一区| 国内精品视频666| 在线日本高清免费不卡| 亚洲国产综合在线| 日韩视频一区二区在线观看 | 亚洲精品午夜| 一本大道久久a久久综合婷婷| 亚洲视频视频在线| 久久激情综合网| 欧美成人免费观看| 一区二区动漫| 美女啪啪无遮挡免费久久网站| 欧美日韩另类丝袜其他| 国产亚洲精品激情久久| 亚洲精品男同| 久久gogo国模啪啪人体图| 麻豆久久精品| 中文精品视频| 欧美chengren| 国产在线不卡精品| 一区二区三区四区国产| 久久在线免费观看| 99re6热只有精品免费观看 | 久久精品亚洲精品| 欧美区日韩区| 激情综合视频| 欧美有码在线视频| 亚洲激情视频在线播放| 亚洲欧美日本国产有色| 久久在线免费观看视频| 国产精品午夜视频| 在线视频亚洲| 欧美二区不卡| 久久国产精品一区二区三区四区| 欧美美女bb生活片| 尤物精品在线| 欧美中在线观看| 亚洲剧情一区二区| 欧美v日韩v国产v| 国产综合视频| 久久久久www| 亚洲欧美清纯在线制服| 亚洲色图自拍| 欧美福利电影在线观看| 亚洲高清免费视频| 久久狠狠亚洲综合| 亚洲性视频网址| 欧美日韩成人在线视频| 亚洲美女少妇无套啪啪呻吟| 欧美jizzhd精品欧美巨大免费| 亚洲一区欧美| 国产精品美女视频网站| 亚洲一区二区三区四区在线观看| 亚洲人成亚洲人成在线观看| 美女网站在线免费欧美精品| 亚洲国产欧美日韩精品| 男女av一区三区二区色多| 久久国产精品99精品国产| 国产日本欧美视频| 久久国产精品黑丝| 午夜精品在线看| 国产亚洲精品7777| 久久久久国产一区二区| 欧美在线视频二区| 激情六月综合| 欧美黄色免费| 欧美日韩国产另类不卡| 亚洲一区二区三区在线播放| 亚洲与欧洲av电影| 国产日产亚洲精品系列| 久久精品二区三区| 久久婷婷激情| 一区二区三区www| 亚洲欧美精品伊人久久| 在线观看国产精品淫| 亚洲风情亚aⅴ在线发布| 欧美日韩国产区一| 欧美一区二区三区四区在线 | 国产在线欧美日韩| 久久午夜国产精品| 欧美成人首页| 亚洲欧美999| 久久精品一区二区三区中文字幕| 亚洲电影自拍| 亚洲一区二区少妇| 国产亚洲二区| 亚洲国产精品va在线观看黑人| 欧美体内she精视频| 久久这里只有| 国产精品成人午夜| 欧美α欧美αv大片| 欧美性猛交xxxx免费看久久久| 久久久久欧美| 欧美日韩在线视频观看| 美女视频网站黄色亚洲| 国产精品a久久久久| 男人的天堂成人在线| 国产精品进线69影院| 欧美激情第三页| 国产欧美在线观看| 亚洲精品综合久久中文字幕| 红桃视频欧美| 亚洲欧美日本另类| 蜜臀久久99精品久久久久久9| 亚洲女与黑人做爰| 欧美激情欧美激情在线五月| 欧美专区中文字幕| 欧美—级a级欧美特级ar全黄| 久久看片网站| 国产精品人人做人人爽| 亚洲另类自拍| 亚洲精品1区| 久久大综合网| 欧美在线视频免费播放| 欧美日韩视频专区在线播放 | 亚洲大片一区二区三区| 国产一区二区三区在线观看精品| 亚洲精品视频在线观看免费| 亚洲国产精品嫩草影院| 欧美亚洲在线视频| 亚洲欧美国产不卡| 欧美日韩中文| 999在线观看精品免费不卡网站| 亚洲精品视频在线播放| 欧美14一18处毛片| 欧美激情一区二区三区高清视频 | 国产欧美日本在线| 亚洲视频观看| 亚洲在线观看免费| 欧美色一级片| 亚洲夜间福利| 欧美一区二区三区四区夜夜大片| 国产精品久久久免费| 亚洲精品视频一区| 亚洲天堂成人在线视频| 欧美日韩综合久久| 夜久久久久久| 销魂美女一区二区三区视频在线| 欧美午夜视频一区二区| 中文在线资源观看网站视频免费不卡 | 欧美日韩1234| 亚洲一二三四久久| 午夜精品在线观看| 国产欧美日韩高清| 久久狠狠亚洲综合| 蜜月aⅴ免费一区二区三区| 在线成人小视频| 欧美成人资源网| 妖精视频成人观看www| 欧美一区二区三区免费观看| 国产亚洲毛片| 噜噜噜噜噜久久久久久91| 91久久久亚洲精品| 亚洲一本大道在线| 国产一区二区三区自拍| 麻豆精品一区二区av白丝在线| 亚洲国产日韩精品| 亚洲欧美乱综合| 在线观看的日韩av| 欧美激情欧美激情在线五月| 亚洲视频在线观看免费| 久久精品国产久精国产爱| 在线成人av.com| 欧美日韩午夜精品| 久久天天综合| 制服诱惑一区二区| 国产一区二区三区高清| 欧美激情综合五月色丁香| 亚洲欧美激情精品一区二区| 蜜乳av另类精品一区二区| 亚洲一区二区精品| 精品成人一区| 国产精品mv在线观看| 久久国产婷婷国产香蕉| 妖精成人www高清在线观看| 久久久夜色精品亚洲| 一区二区欧美在线观看| 国产综合视频| 国产精品第十页| 免费的成人av| 羞羞答答国产精品www一本 | 日韩一二三在线视频播| 国产视频精品xxxx| 国产精品va在线播放| 毛片av中文字幕一区二区| 亚洲男女自偷自拍| 亚洲欧洲精品一区二区| 久久久久久久高潮| 亚洲一级黄色片| 亚洲欧洲一区| 激情文学一区| 国产日韩欧美| 国产精品揄拍一区二区| 欧美精品一区在线| 蜜臀久久久99精品久久久久久| 久久精品免视看|