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

Clear

記憶中的閃光,總會蒙塵。
隨筆 - 6, 文章 - 0, 評論 - 0, 引用 - 0
數據加載中……

2012年11月15日

讓Premake4支持protobuf的protoc生成源文件

最近在使用Premake4進行項目配置生成makefile之類。

比較而言,Premake4比cmake還是感覺簡單一點,至少lua語法簡單,premake4的配置文件比較簡單易讀,而cmake的配置文件就比較復雜,而且又是自己定義的一套東西,用起來實在比較煩。

Premake4還有一個比較好用的特性,可以直接用 **/*.cpp 指定項目包含所有目錄下的cpp文件,而不用單個指定。這樣每次增加一個文件不用老等編譯了才想起來忘記了增加文件到配置中。算是給懶人的一個福利吧。

當然,Premake4也有自己的缺陷,目前還不支持自定義規則,所以如果項目中有用到什么自動生成源文件的特性就比較麻煩了,比如這次說到的protobuf要用protoc編譯.proto文件生成.pb.cc和.pb.h文件,另外QT也有類似的需求,就我之前某項目中,也使用了tolua++生成過c++的lua接口文件。

但是,Premake4雖然還不支持自定義規則,但是總算有一個prebuildcommands可以用,于是研究了一下,自制了一個.proto文件的"編譯規則":

function protobufs(pat)
local list = {}
if type(pat) == "string" then
list[1] = pat;
elseif type(pat) == "table" then
list = pat;
end
local proj = project();
for _,pat in ipairs(list) do
local protofiles = os.matchfiles(pat);
for _,protofile in ipairs(protofiles) do
local basename = path.getbasename(protofile);
local sourcedir = proj.basedir.."/"..path.getdirectory(protofile);
local sourcefile = proj.basedir.."/"..protofile;
local targetdir = "$(OBJDIR)/proto/"..path.getdirectory(protofile);
local targetfile = targetdir.."/"..basename..".pb.cc";
prebuildcommands {
"@mkdir -p "..targetdir,
"@test "..sourcefile.." \\\n"
.."\t\t\t -ot "..targetfile.." || \\\n"
.."\t\t( echo protoc "..protofile.." && \\\n"
.."\t\tprotoc --cpp_out "..targetdir.."\\\n"
.."\t\t\t"..sourcefile.."\\\n"
.."\t\t\t".." -I"..sourcedir.." ) \\\n"
}
files {
path.join(targetdir, basename..".pb.h"),
path.join(targetdir, basename..".pb.cc"),
}
includedirs { targetdir }
end
end
end

使用方法呢,就是把上面的代碼保存到protobuf.lua里面,然后在premake4.lua最開始的時候,調用

dofile "protobuf.lua"

然后在項目定義的時候,使用

protobufs { "**/*.proto" }

就可以了。

?

當然,還有一點要注意的,我的系統是mac,但腳本在linux下應該也能同樣運行,但是windows下面的話,可能就需要做一點改動了。

posted @ 2012-11-15 22:44 Clear 閱讀(1402) | 評論 (0)編輯 收藏

2012年11月11日

MacVim中Pyclewn的配置

換到Mac下面,MacVim自然裝上了。

要想調試程序,直接gdb倒也可以,不過就是找代碼很費力,這就要看Pyclewn了。

下載,安裝,一切似乎都正常。

可是啟動pyclewn以后,發現gdb的命令沒有輸出到buffer?怎么搞?

原來pyclewn用的還是系統自帶的gdb,暈,版本好老了。

在.vimrc里面加上

set pyclewn_args='-p ggdb'

指定使用macports的gdb,這就行了。

ps.

MacVim 的snapshot 64版本的balloon顯示不出來,不知道怎么回事。

升級到snapshot 65就ok了。

posted @ 2012-11-11 17:38 Clear 閱讀(630) | 評論 (0)編輯 收藏

2012年10月28日

GDB在Mac下的調試信息

上次說了GDB的pretty printer,這次來說說調試程序的問題。

在Linux或者Windows下面,寫好代碼,g++編譯,連接,調試,一切很順暢。

但是在Mac下面,有點小問題。

我們如果是直接編譯生成可執行文件:

g++ test.cpp -g -o test

ok,我們用GDB調試,沒有問題。
但是如果我們分兩步,編譯和連接分開的話:

g++ test.cpp -g -c -o test.o
g++ -o test test.o

這次我們gdb test再調試,會發現GDB找不到調試符號信息!

兩次生成有什么不同呢?
一次編譯生成的test,旁邊有一個test.dSYM,而單獨連接的test,沒有這個。

test.dSYM就是調試符號信息。
要想生成這個東西,也簡單,運行dsymutil就可以了:?

dsymutil test

再然后,就可以用GDB順利調試了。

g++直接生成可執行文件的時候,會幫我們調用一次dsymutil,但是單獨連接的時候卻不會做這個,這就是造成差別的原因。

posted @ 2012-10-28 23:47 Clear 閱讀(888) | 評論 (0)編輯 收藏

2012年9月24日

Mac 下使用GDB的pretty printer

GDB 從7.x版本開始就支持pretty printer

可是一直以來都沒有見到這個東西起作用,最近就研究了一下。

我的環境是Mac Mountain Lion + macports,GCC 4.7,GDB 7.5

首先,按照

http://sourceware.org/gdb/wiki/STLSupport

下載checkout STL的pretty printer。

設置好.gdbinit以后,運行告知已經注冊,不能重復注冊。

$locate printers.py

發現在/opt/local/share/gcc-4.7/gcc-4.7.1/python/libstdcxx/v6已經有一份現成的了。

好吧,我們就使用現有的好了。

寫個程序,調試,print,怎么回事?還是不成?

頭暈了好久,好在python的源碼是可以隨便看隨便改的,于是在printers.py里面改來改去,調試了半天,發現:

這個printers.py注冊了好多stl類型的printer,打印出來有以下這些:

std::__cxx1998::__7::unordered_multiset

std::tr1::unordered_multiset

std::unordered_set

std::tr1::unordered_multimap

std::tr1::__7::weak_ptr

std::__7::bitset

std::__cxx1998::multiset

std::bitset

std::forward_list

std::__7::forward_list

std::__cxx1998::forward_list

std::__7::_Rb_tree_iterator

std::__7::list

std::__debug::unordered_multimap

__gnu_cxx::slist

std::__7::priority_queue

std::__debug::map

std::_List_const_iterator

std::__debug::unordered_map

__gnu_cxx::_Slist_iterator

std::set

std::__cxx1998::__7::_Deque_const_iterator

std::__7::_List_const_iterator

std::__7::multiset

std::shared_ptr

std::__7::queue

std::__cxx1998::_List_iterator

std::tr1::unordered_map

std::__7::vector

std::__debug::queue

std::__norm::_Deque_const_iterator

std::__7::unordered_set

std::__norm::_Deque_iterator

std::__cxx1998::_Deque_iterator

__gnu_cxx::__7::_Slist_iterator

std::__cxx1998::list

std::__cxx1998::__7::list

std::unordered_multimap

std::__cxx1998::unordered_multiset

std::__cxx1998::__7::_List_iterator

std::__7::map

std::__debug::vector

std::tr1::__7::unordered_set

std::__7::basic_string

std::weak_ptr

std::__7::set

std::__7::unordered_multiset

__gnu_cxx::__7::__normal_iterator

std::__cxx1998::__7::vector

std::unordered_map

std::list

std::tr1::__7::unordered_map

std::__7::unordered_multimap

std::vector

std::tr1::unordered_set

std::_List_iterator

std::__7::_Deque_iterator

std::__cxx1998::map

std::__cxx1998::bitset

std::__7::weak_ptr

std::__cxx1998::vector

std::__cxx1998::unordered_set

std::priority_queue

__gnu_cxx::__7::slist

std::__7::_Rb_tree_const_iterator

std::_Deque_const_iterator

std::__7::deque

std::__cxx1998::set

std::__cxx1998::__7::bitset

__gnu_debug::_Safe_iterator

std::tr1::__7::unordered_multimap

__gnu_cxx::__normal_iterator

std::__cxx1998::__7::multiset

std::__cxx1998::__7::unordered_map

std::__debug::unique_ptr

std::__cxx1998::_List_const_iterator

std::_Deque_iterator

std::tr1::__7::unordered_multiset

std::unordered_multiset

std::__cxx1998::__7::unordered_multimap

std::__debug::multiset

std::tr1::weak_ptr

std::__cxx1998::_Deque_const_iterator

std::__cxx1998::unordered_map

std::__7::unique_ptr

std::__debug::list

std::__debug::unordered_multiset

std::__cxx1998::deque

std::_Rb_tree_const_iterator

std::__debug::bitset

std::queue

std::tr1::__7::shared_ptr

std::__debug::unordered_set

std::tr1::shared_ptr

std::__cxx1998::__7::_List_const_iterator

std::__cxx1998::__7::_Deque_iterator

std::__cxx1998::__7::map

std::__7::stack

std::unique_ptr

std::__cxx1998::__7::deque

std::map

std::__7::multimap

std::stack

std::__debug::stack

std::_Rb_tree_iterator

std::multimap

std::__norm::_List_const_iterator

std::__debug::multimap

std::__norm::_List_iterator

std::deque

std::tuple

std::__cxx1998::unordered_multimap

std::basic_string

std::__7::tuple

std::__debug::deque

std::__debug::priority_queue

std::__7::_Deque_const_iterator

std::__7::shared_ptr

std::__cxx1998::__7::multimap

std::__debug::forward_list

std::__7::unordered_map

std::__debug::set

std::__cxx1998::__7::unordered_set

std::__cxx1998::__7::set

std::__7::_List_iterator

std::__cxx1998::multimap

std::__cxx1998::__7::forward_list

std::multiset:

然后,我們的一個簡單的string類型,傳入到python的lookup里面查找,找不到?

最后發現,string類型傳入python以后的basename是basic_string,沒有前面的namespace!

于是,在Printer類的add_version函數里面,增加一行

self.add(name, function)

保存,重新打開GDB,調試程序,OK了:

(gdb) p s

$1 = "great"

(gdb) p v

$2 = vector of length 5, capacity 8 = {"a1", "a2", "a2", "a3", "a4"}

posted @ 2012-09-24 23:15 Clear 閱讀(1761) | 評論 (0)編輯 收藏

2009年9月27日

CoLinux的網絡配置

     摘要: 昨天的說到配置CoLinux在Windows下面啟動另一個分區里面的Linux,但是網絡配置只是使用了最簡單的slirp模式。

CoLinux的網絡配置共有3種:

slirp:最簡單的模式,CoLinux內可通過Windows系統訪問網絡,但外部不能直接訪問Linux,如果需要訪問,需要做端口映射。
tuntap:在Windows中虛擬一塊網卡,Linux與Windows通過該網卡通訊,Linux不能直接訪問外部網絡,必須在Windows上配置路由和NAT,或者簡單使用Windows的Internet連接共享ICS。
pcap-bridge:必須有一塊連接網絡的網卡才能使用,另外需要安裝WinPCap軟件。該模式將一塊實際網卡模擬出另一塊網卡并連接到網絡,對外部看來,就好像實際上有兩臺不同機器一樣。
ndis-bridge:與pcap-bridge模式一樣,不過不使用WinPCap軟件接口而是通過Windows的NDIS接口層模擬網卡。  閱讀全文

posted @ 2009-09-27 22:29 Clear 閱讀(4633) | 評論 (0)編輯 收藏

Windows和Linux雙啟動,并用在Windows下配置CoLinux啟動

     摘要: Windows和Linux都是好東西,配置雙啟動不難,但是有時候在Windows下面想要臨時換到Linux,總是麻煩。

以前都是用VmWare,配置使用實際硬盤,然后再Windows里面進行啟動另一個分區里面的Linux然后操作。

不過這樣實在是麻煩,而且VmWare占用資源也是在太大,如果配置512內存,就要在系統里面直接占用掉512M內存,即使實際上Linux根本不用那么多。

不過,前段時間發現了CoLinux這個好東西,可以把Linux內核作為Windows的本地進程運行,不錯不錯。
  閱讀全文

posted @ 2009-09-27 01:11 Clear 閱讀(1968) | 評論 (0)編輯 收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美激情性爽国产精品17p| 日韩亚洲欧美精品| 你懂的视频一区二区| 久久婷婷综合激情| 久久人人97超碰精品888| 久久久999精品免费| 久久精品亚洲一区二区| 美女福利精品视频| 欧美日韩亚洲一区二区三区在线 | 久久久久久久尹人综合网亚洲| 亚洲欧美中文另类| 久久人人97超碰国产公开结果| 你懂的视频一区二区| 欧美日韩国产免费观看| 国产精品激情| 国产自产女人91一区在线观看| 亚洲成色777777在线观看影院| 亚洲青色在线| 欧美呦呦网站| 亚洲欧洲精品一区二区精品久久久| 欧美成人在线网站| 中文日韩欧美| 老鸭窝毛片一区二区三区 | 免费在线观看精品| 欧美久久电影| 国产亚洲精久久久久久| 亚洲精品视频中文字幕| 亚洲欧美日韩国产综合| 免费观看久久久4p| 亚洲一区二区三区视频播放| 欧美自拍偷拍| 国产精品对白刺激久久久| 在线日韩欧美| 欧美一区二区三区免费在线看| 欧美成人资源| 午夜精品久久久久久99热软件| 免费观看30秒视频久久| 国产日韩精品一区二区三区| 一本色道久久综合| 免费一区二区三区| 新狼窝色av性久久久久久| 欧美日韩精品系列| 亚洲激情在线观看视频免费| 久久久99国产精品免费| 中文国产一区| 国产精品99免费看 | 欧美精品日韩精品| 精品成人一区| 欧美制服丝袜| 亚洲一区二区三区国产| 欧美激情一区二区三区在线视频观看 | 久久久久久久久久久久久9999| 国产精品mm| 99热精品在线观看| 亚洲国产毛片完整版| 久久先锋资源| 一区二区在线看| 久久精品视频免费播放| 亚洲图片欧洲图片日韩av| 欧美日韩国产三区| 一区二区日韩精品| 日韩视频在线免费| 欧美三级视频在线| 亚洲综合大片69999| 亚洲图片欧洲图片日韩av| 国产精品地址| 欧美在线电影| 欧美在线观看视频一区二区三区 | 国内视频精品| 久久久久久久综合日本| 欧美影院精品一区| 在线不卡中文字幕播放| 蜜桃久久精品乱码一区二区| 久久久久国产精品人| 1024国产精品| 亚洲激情一区二区| 欧美性猛交xxxx免费看久久久| 亚洲尤物视频在线| 亚洲欧美日韩精品久久亚洲区| 国产日韩欧美视频在线| 久久午夜电影| 欧美大片一区二区三区| 在线亚洲+欧美+日本专区| 亚洲视频在线观看视频| 国产午夜精品在线| 欧美激情bt| 国产精品草草| 麻豆久久久9性大片| 欧美精品一区二区三区蜜桃| 亚洲欧美综合网| 久久中文字幕一区| 亚洲夜晚福利在线观看| 欧美在线日韩| 中文国产成人精品| 久久国产精品一区二区三区四区| 亚洲精品123区| 国产精品99久久久久久www| 国精品一区二区| 日韩视频―中文字幕| 精品91免费| 亚洲一区二区三区乱码aⅴ| 亚洲大胆av| 99精品视频免费观看视频| 国产综合久久| 99在线观看免费视频精品观看| 国产中文一区| 一区二区欧美日韩| 亚洲国产一区二区三区高清| 亚洲综合视频网| 亚洲精品视频一区| 久久成人在线| 午夜精品电影| 欧美日韩国产区一| 欧美成人蜜桃| 国产在线视频欧美| 亚洲欧美日韩国产成人| 日韩一区二区高清| 麻豆成人在线| 快射av在线播放一区| 国产伦理一区| 一本久道综合久久精品| 亚洲美女av黄| 欧美成人午夜视频| 欧美刺激性大交免费视频| 国产日韩亚洲| 亚洲综合色丁香婷婷六月图片| 中文欧美在线视频| 欧美精品电影在线| 亚洲第一在线| 亚洲国产天堂久久国产91| 久久本道综合色狠狠五月| 欧美专区在线播放| 国产日韩成人精品| 久久精品青青大伊人av| 亚洲高清123| 久久久999| 欧美阿v一级看视频| 一区二区三区中文在线观看| 欧美一区二区在线观看| 久久国产精品亚洲va麻豆| 国产精品一区二区你懂得| 亚洲免费一区二区| 久久国产一区| 亚洲第一伊人| 午夜在线观看免费一区| 欧美日韩mv| 亚洲视频一区二区免费在线观看| 亚洲精品一二区| 欧美日韩在线一区| 亚洲一区二区三区777| 久久国产精品久久国产精品| 国产一区二区精品久久| 久久精品二区三区| 亚洲国产高清aⅴ视频| 亚洲毛片在线看| 欧美婷婷六月丁香综合色| 亚洲一区二区在线播放| 久久免费午夜影院| 亚洲欧洲另类国产综合| 欧美高清视频在线播放| 一本久久精品一区二区| 久久国产主播精品| 91久久线看在观草草青青| 欧美日韩国产在线| 欧美在线亚洲| 91久久久久久久久| 亚洲欧美日韩在线观看a三区| 国产精品一卡二| 久久深夜福利| 亚洲视频福利| 免费成人高清视频| 亚洲视频大全| 国产揄拍国内精品对白| 欧美大成色www永久网站婷| 一本色道久久加勒比88综合| 久久久国产视频91| 99伊人成综合| 国产美女精品在线| 欧美精品videossex性护士| 午夜免费在线观看精品视频| 欧美91视频| 午夜精品久久久久久久久| 亚洲国产另类 国产精品国产免费| 欧美日韩在线观看一区二区三区 | 一区免费观看| 欧美色视频一区| 久久精品99国产精品| 一区二区三区免费观看| 你懂的国产精品| 欧美在线视频在线播放完整版免费观看| 韩国一区二区在线观看| 国产精品av免费在线观看| 欧美aⅴ一区二区三区视频| 亚洲欧美国产另类| 日韩写真在线| 亚洲国产精品嫩草影院| 免费看亚洲片| 久久精品欧美日韩| 亚洲性感激情| 欧美成人国产va精品日本一级|