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

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 閱讀(1397) | 評論 (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 閱讀(626) | 評論 (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 閱讀(885) | 評論 (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 閱讀(1754) | 評論 (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 閱讀(4626) | 評論 (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 閱讀(1964) | 評論 (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>
            亚洲第一天堂无码专区| 欧美午夜在线视频| 在线观看日韩av先锋影音电影院| 欧美专区日韩专区| 欧美在线观看视频在线| 在线国产精品播放| 亚洲高清电影| 欧美日韩在线免费| 欧美一级视频精品观看| 久久精品夜色噜噜亚洲aⅴ| 在线观看亚洲专区| 99国产精品久久久久久久成人热| 国产精品高清在线| 美女久久一区| 欧美日韩亚洲一区二区三区在线| 午夜欧美精品| 久久亚洲一区二区| 亚洲综合日韩中文字幕v在线| 午夜精品久久久久久久白皮肤| 在线观看91精品国产入口| 亚洲精品乱码久久久久久久久 | 一区二区三区免费在线观看| 国产精品久久久久久久久久ktv| 欧美在线精品一区| 美女国产一区| 午夜欧美不卡精品aaaaa| 久久久久久久久综合| 在线视频欧美日韩| 久久久另类综合| 亚洲在线电影| 欧美成人精品福利| 久久精品中文| 欧美四级在线观看| 亚洲国内高清视频| 激情久久久久久久久久久久久久久久| 亚洲欧洲日韩在线| 伊人久久婷婷色综合98网| 中文精品在线| 日韩网站在线观看| 久久久久久久久久久久久女国产乱 | 亚洲三级视频在线观看| 亚洲一区二区三区高清 | 国产精品乱码久久久久久| 欧美国产日韩一区二区在线观看| 国产精品中文在线| 亚洲精品一区二区三区婷婷月| 欧美一区1区三区3区公司| 亚洲伦理在线免费看| 久久精品国产亚洲aⅴ| 亚洲欧美成aⅴ人在线观看| 欧美电影专区| 欧美成人日韩| 在线精品亚洲| 久久久久在线| 欧美bbbxxxxx| 亚洲第一在线综合网站| 欧美一区二区精品久久911| 欧美亚洲日本一区| 国产精品第一区| 一区二区免费看| 亚洲综合大片69999| 欧美天堂在线观看| 在线亚洲欧美专区二区| 亚洲一本大道在线| 欧美性淫爽ww久久久久无| 一本一道久久综合狠狠老精东影业| 亚洲激情视频网| 农夫在线精品视频免费观看| 欧美大片在线看免费观看| 永久免费毛片在线播放不卡| 久久久久久欧美| 欧美大片免费观看| 日韩系列欧美系列| 欧美系列精品| 香蕉久久a毛片| 麻豆国产精品va在线观看不卡| 国内精品久久久久久 | 国产精品美女久久久久久免费 | 日韩午夜三级在线| 亚洲自拍偷拍麻豆| 国产亚洲观看| 老司机aⅴ在线精品导航| 亚洲国产精品尤物yw在线观看 | 国产三级欧美三级| 久久女同互慰一区二区三区| 亚洲国产成人午夜在线一区 | **性色生活片久久毛片| 欧美国产激情| 亚洲视频播放| 久久蜜桃精品| 99精品热6080yy久久| 国产精品入口日韩视频大尺度| 香蕉久久精品日日躁夜夜躁| 美女精品国产| 亚洲欧美电影在线观看| 国产一区二区三区视频在线观看| 麻豆久久精品| 亚洲欧美高清| 亚洲精品乱码久久久久久日本蜜臀| 亚洲影院色无极综合| 韩国精品一区二区三区| 欧美精品粉嫩高潮一区二区| 欧美一级大片在线观看| 亚洲精品视频啊美女在线直播| 午夜亚洲一区| 99国产精品自拍| 黄色免费成人| 国产精品免费一区二区三区观看| 久久久国产成人精品| 一区二区av在线| 妖精视频成人观看www| 国产一区二区| 国产精品久久久久久av福利软件 | 久久精品国产欧美激情| 亚洲美女中文字幕| 男人插女人欧美| 欧美一区二区日韩一区二区| 亚洲另类在线一区| 黄色国产精品| 国产午夜精品理论片a级大结局 | 欧美一区二区久久久| 99精品国产在热久久婷婷| 免费视频亚洲| 久久国产婷婷国产香蕉| 亚洲一区二区三区久久| 亚洲日本电影在线| 亚洲国产精品成人综合| 国产亚洲精品成人av久久ww| 国产精品国产| 欧美午夜精品理论片a级按摩| 免费毛片一区二区三区久久久| 久久精品亚洲精品| 欧美在线综合视频| 午夜精品久久久久久久99黑人| 亚洲图片欧美日产| 亚洲视频欧美视频| 一本色道久久88综合亚洲精品ⅰ| 亚洲精品免费在线| 日韩视频免费在线| 亚洲免费高清视频| 一区二区三区www| 一本色道精品久久一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产亚洲一区二区精品| 国产裸体写真av一区二区| 国产精品国产三级国产aⅴ无密码| 欧美精品一区二区高清在线观看| 欧美~级网站不卡| 欧美激情亚洲自拍| 欧美日韩精品欧美日韩精品一| 欧美二区在线| 欧美日本久久| 国产精品视频观看| 国产亚洲精品福利| 亚洲国产精品v| 夜色激情一区二区| 亚洲免费在线观看| 久久精品国产久精国产爱| 久久久久久免费| 欧美高清视频一区| 日韩午夜激情| 性做久久久久久久久| 久久人人97超碰人人澡爱香蕉 | 亚洲欧美中文另类| 久久久精品国产免费观看同学| 欧美aa国产视频| 欧美日韩在线一区| 韩日欧美一区二区三区| 亚洲黄色一区二区三区| 亚洲男人av电影| 美日韩精品免费| 一区二区三区高清在线| 欧美亚洲尤物久久| 欧美另类视频在线| 国产欧美日韩不卡免费| 亚洲精品少妇30p| 香蕉久久一区二区不卡无毒影院| 六月丁香综合| 亚洲视频在线观看三级| 亚洲激情小视频| 午夜视频一区二区| 欧美激情精品久久久| 国产乱人伦精品一区二区| 亚洲人成在线播放网站岛国| 午夜国产精品影院在线观看| 欧美电影免费观看高清| 亚洲深夜影院| 嫩草影视亚洲| 红桃视频欧美| 新狼窝色av性久久久久久| 欧美国产精品久久| 午夜精品视频一区| 欧美色区777第一页| 最新中文字幕亚洲| 久久亚洲风情| 亚洲欧美精品一区| 国产精品久久97| a4yy欧美一区二区三区| 欧美国内亚洲| 久久亚洲春色中文字幕久久久|