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

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>
            激情综合在线| 亚洲国产一区二区三区在线播| 欧美理论在线| 欧美精品激情| 欧美日韩午夜剧场| 国产精品vvv| 欧美一区二区网站| 亚洲国产精品久久久久秋霞蜜臀 | 欧美日韩国产精品| 欧美日韩在线视频观看| 国产欧美一区二区色老头| 国产主播一区二区| 亚洲欧洲偷拍精品| 亚洲一区二区三区久久| 久久国产加勒比精品无码| 免费高清在线一区| 99精品视频免费观看视频| 亚洲天堂网站在线观看视频| 久久精品2019中文字幕| 免费日韩视频| 国产精品日韩欧美一区二区三区| 永久555www成人免费| 一区二区欧美视频| 老巨人导航500精品| 日韩一级大片在线| 久久免费黄色| 国产精品久久久免费| 久久久亚洲人| 欧美成人高清| 国产精品美女一区二区| 亚洲高清视频的网址| 小处雏高清一区二区三区 | 国产伦精品一区二区三区视频黑人 | 欧美在线日韩精品| 亚洲欧洲日产国产网站| 性欧美videos另类喷潮| 欧美大片网址| 一色屋精品视频免费看| 欧美一区二区高清| 亚洲美女av在线播放| 蜜桃精品久久久久久久免费影院| 国产精品一区亚洲| 亚洲永久免费观看| 亚洲精品视频在线观看免费| 久久综合五月| 伊人成人网在线看| 久久综合色88| 久久精品国产99| 国产日韩专区在线| 香蕉精品999视频一区二区| 一区二区欧美亚洲| 欧美日韩小视频| 一区二区三区国产在线观看| 亚洲激情影院| 欧美日韩国产综合新一区| 亚洲精品四区| 久久人体大胆视频| 亚洲人成人77777线观看| 国产婷婷色一区二区三区四区| 欧美午夜精品| 亚洲最黄网站| 亚洲日本中文字幕| 欧美日韩久久| 亚洲午夜久久久久久尤物| 亚洲视频日本| 欧美黄色一区二区| 欧美激情精品久久久久久久变态 | 亚洲日本中文| 欧美日韩免费一区二区三区视频 | 日韩亚洲精品视频| 欧美日韩中文字幕日韩欧美| 亚洲一区精品在线| 亚洲摸下面视频| 国产综合欧美| 欧美国产在线视频| 免费短视频成人日韩| 日韩午夜av电影| av成人免费在线| 国产日韩欧美高清| 欧美成人免费播放| 欧美日韩在线一区| 久久国产精品第一页| 久久福利视频导航| 亚洲靠逼com| 亚洲一区二区视频| 1024亚洲| 亚洲午夜精品在线| 伊人久久综合| 一区二区三区**美女毛片| 国产一区二区三区在线观看免费视频| 久久一区二区三区四区五区| 欧美激情精品久久久久久蜜臀 | 亚洲精品久久久久久久久久久久久| 欧美日韩精品二区第二页| 性久久久久久| 欧美电影在线观看| 午夜日韩在线| 欧美激情精品久久久久久| 欧美亚洲免费在线| 欧美成人国产一区二区| 欧美专区18| 免费看的黄色欧美网站| 亚洲第一毛片| 亚洲欧美日韩久久精品| 亚洲精品一区二区三区四区高清 | 久久久久欧美精品| 亚洲综合色视频| 国产麻豆精品在线观看| 亚洲一区二区高清| 欧美亚洲在线| 欧美日韩国产一级片| 国产女主播一区| 久久视频国产精品免费视频在线| 男人的天堂亚洲| 久久精品国产视频| 国产精品v欧美精品∨日韩| 亚洲电影免费观看高清完整版在线 | 鲁大师成人一区二区三区| 亚洲欧洲av一区二区三区久久| 蜜臀av性久久久久蜜臀aⅴ| 久久精品九九| 国产精品一区二区欧美| 日韩视频在线一区二区| 亚洲精品孕妇| 久久精品在线观看| 国产精品永久| 亚洲综合大片69999| 亚洲影院污污.| 欧美视频在线免费看| 日韩视频在线观看| 一区二区国产在线观看| 欧美成年人在线观看| 欧美大片专区| 亚洲国产aⅴ天堂久久| 久久五月婷婷丁香社区| 老司机午夜精品视频在线观看| 国产深夜精品福利| 欧美一进一出视频| 亚洲国产精品久久久久秋霞不卡 | 国产一区在线看| 亚洲永久免费观看| 性做久久久久久久久| 国产精品亚洲视频| 亚洲欧美综合v| 久久黄金**| 国产综合欧美| 久久香蕉国产线看观看av| 欧美成人网在线| 日韩视频在线一区二区三区| 欧美日韩一区二区三区免费看| 一区二区三区蜜桃网| 欧美在线一二三四区| 国内激情久久| 欧美电影免费网站| 一区二区久久| 久久久久久伊人| 最近中文字幕日韩精品| 午夜激情一区| 欧美性大战久久久久久久蜜臀| 欧美一乱一性一交一视频| 国产欧美日本| 久久夜色精品国产| 亚洲精品免费看| 亚洲欧美日韩一区二区三区在线 | 亚洲国产欧美不卡在线观看| 亚洲高清不卡在线观看| 老司机一区二区| 一本久道久久综合中文字幕| 久久精品国产精品亚洲| 亚洲精品视频在线观看免费| 亚洲视频一区二区| 美女精品视频一区| 一本色道久久88综合日韩精品| 国产精品欧美日韩| 久久综合九色欧美综合狠狠| 一本在线高清不卡dvd| 久久综合色8888| 亚洲香蕉网站| 亚洲国内精品| 国产拍揄自揄精品视频麻豆| 欧美福利视频在线| 久久精品成人一区二区三区蜜臀| 亚洲精品久久久久久久久| 久久久女女女女999久久| 一本色道久久88综合日韩精品| 国产亚洲一区在线| 国产精品啊v在线| 久久黄色影院| 噜噜噜久久亚洲精品国产品小说| 在线亚洲欧美视频| 亚洲国产综合视频在线观看| 国产麻豆日韩| 国产精品成人在线| 欧美激情综合| 免费成人性网站| 久久久久欧美| 久久福利影视| 久久国产精品网站| 亚洲一区二区在| 一区二区三区四区精品|