libCMt.lib
|
库的静态链接发行版本
|
|
libCMtD.lib
|
库的静态链接调试版本
|
|
MSVCRt.lib
|
导入库,用于动态链接MSVCR80.dll(默认库)
|
|
MSVCRtD.lib
|
导入库,用于动态链接MSVCR80D.dll
|
|
MSVCMRt.lib
|
导入库,.net的托管/本机代码混合
|
|
MSVCURt.lib
|
导入库,.net的MSIL代码
|
分类: 利器与技巧
windows核心编程(第5版)读书笔记四
VC6工程项目改名
window开发之项目宏定义
VC6的环境小结
以Qtreeview为例介绍Qt的model/view/item框架
静态编译Qt5.5并应用成果
一直为打包Qt开发的东东依赖库发愁。只好研究下静态编译,当然选个最新的版本。
环境如下:
win7 x86
VS2012
perl5.16.2
python34(32bit)
ruby21
Qt5addin1.2.4
说明:ruby安装时要把三个都选择上,QT5addin插件安装要特有耐心,不然总会觉得,程序假死了。(后来发现是装集成help文档时占时间,可以不装它的)
以上安装在一个独立的虚机,方便以后改造,重要的一点是,一编译就2-3个小时,你对着屏发呆嘛?
下载Qt5.5的源码,进入其目录,需要改的有两处:
<src目录>\qtbase\mkspecs\win32-msvc2012\qmake.conf.
将
将以下三处 -MD修改为 -MT
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
当环境不同,聪明的你会找到需要更改的位置。5.5源码包是mkspecs/comon/msvc-desktop.conf里面改。
建立个批处理文件,如vs2012.build.bat
内容如下:
::配置路径
set QT5_DIR=C:\qt_tool\qt-everywhere-opensource-src-5.5.0-alpha
set THIRDPARTY_DIR=C:\qt_tool\Build
::如果您用mingw可以在这儿设置下您的mingw目录
set PATH=%PATH%;C:\Perl\site\bin;C:\Perl\bin;C:\Python34;C:\Ruby21\bin;
set PATH=%PATH%;%QT5_DIR%\bin;%QT5_DIR%\qtbase\bin;%QT5_DIR%\gnuwin32\bin;
::配置依赖,mingw的可能需要您手动加上库和头文件位置,vs的话您可以打开相应的VS* X86/64 本机命令提示符
::set SQLITE3SRCDIR=%THIRDPARTY_DIR%\sqlite
::set LIB=%LIB%;%THIRDPARTY_DIR%\icu\win32\lib;%THIRDPARTY_DIR%\icu\win32\libs;%THIRDPARTY_DIR%\openssl\openssl32\lib
::set INCLUDE=%INCLUDE%;%THIRDPARTY_DIR%\icu\win32\include;%THIRDPARTY_DIR%\openssl\openssl32\include
::set PATH=%PATH%;%THIRDPARTY_DIR%\icu\win32\bin;%THIRDPARTY_DIR%\openssl\openssl32\bin
::配置QT,为了在输入configure配置qt编译选项,我就直接写到bat了、、、
cd %QT5_DIR%
configure -prefix C:\QtSdk\Win32_static -opensource -confirm-license -static -platform win32-msvc2012 -release -c++11 -qt-sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -no-angle -no-icu -opengl desktop -nomake examples -nomake tests -no-compile-examples -skip qtwebkit
把它保存。不提倡改那个bat文件,因为,webkit是不能静态编译的,并且它很耗时,并且很多选项都是经验之谈。
然后,找nmake去。在开始菜单里找”vs2012 x86本机工具命令指示行“,
打开,进入源码目录,执行批处理。
你的环境一致,定能configure过。注意,要清除前一次的垃圾,需要用nmake distclean
后面的事就是敲nmake,泡杯茶了。
有时,你真的nmake成功了,但是不一定能nmake install正常。但我坚信install只是一系列拷贝操作。你要的那些lib已经OK了,你可以部署的时候再用他们。
当然,你可以坚持找原因,nmake install成功。
注意,不要轻易改变源码的位置,或节省空间删除它。否则,上帝保佑你。
后记:
以为装了Qt5addin,打开就可以看到Qt5的菜单,错了,还要真的装个Qt sdk才行。
Qtcreator静态编译了一下,的确可用,但是无法部署到同为32的xp下。可能是因为,Qt使用的编译器仍然是VS2012的,所以,再用VS2012+Qt5addin试一次,何况这是我们目标。
不过,我发现一个坑,Qt5addin1.2.4根本和VS2012不兼容,而且这不会提示你。
1.2.3装后,开始真正的应用静态编译的成果了。
项目设置:
为了让exe能跑在xp上,需要设置在工程—-属性—配置属性–常规–平台工具集v110_xp
因为,我编译的lib都是realse的,所以把项目设成realse
改成(release为MT,debug为MTD)
在工程—-属性—配置属性—c/c++—代码生成—-运行库
选择为“多线程(/MT)”
这样设置可能是约定了对lib的调用方式。
否则,编译时报错:runtimelibrary
error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
在工程—-属性—配置属性—链接器
本人的附加依赖项(备忘):$(QTDIR)\lib\Qt5Core.lib;$(QTDIR)\lib\Qt5Gui.lib;$(QTDIR)\lib\qtmain.lib;$(QTDIR)\lib\Qt5Widgets.lib;$(QTDIR)\plugins\platforms\qwindows.lib;$(QTDIR)\lib\Qt5PlatformSupport.lib;$(QTDIR)\plugins\platforms\qminimal.lib;$(QTDIR)\plugins\platforms\qoffscreen.lib;$(QTDIR)\lib\Qt5OpenGL.lib;$(QTDIR)\lib\Qt5OpenGLExtensions.lib;$(QTDIR)\lib\Qt5Sql.lib;winspool.lib;shlwapi.lib;rpcrt4.lib;$(QTDIR)\plugins\imageformats\qico.lib;$(QTDIR)\plugins\imageformats\qsvg.lib;$(QTDIR)\lib\Qt5Qml.lib;$(QTDIR)\lib\Qt5Quick.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;glu32.lib;opengl32.lib;gdi32.lib;$(QTDIR)\lib\qtharfbuzzng.lib;kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;mpr.lib;%(AdditionalDependencies)
上面配置解决了一个ub_buffer_create……destroy啥的编译错误。
QT5设置:
VS中设置好Qt versions为静态的sdk,然后在Qt project setting—–properties页的最后一个设置上。
即version属性选择下拉中的静态sdk(有时忘记它,其实主要开关在这里)
最后构建你的程序吧。不过还是有坑的。虽然没有报error了,但当你运行它会提示你:
……Failed to load platform plugin windows……
这次改main.cpp吧
#include
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);
编译通过,这次把exe放到没有Qt5安装的xp下,都如愿运行,出画面了。
大胆的写Qt吧,一次编写,到处部署(很方便)
vim-ide技巧
乱码问题办法:以本人gvim为环境
set enc=cp936
set termencoding=chinese
language message cp936
export LANG=zh_CN.GBK
export LC_ALL=zh_CN.GBK
:help encoding-values
“ctrl+]”—–光标会自动跳转到定义处
“ctrl+T”—–光标会从定义跳转回来
Tlist——–TagList窗口即出现在左侧
wm———–打开左侧两栏(文件和声明)
ctrl+Tab—–切换到前一个buffer,并在当前窗口打开文件;
ctrl+shift+Tab—切换到后一个buffer,并在当前窗口打开文件;
ctrl+箭头键—–可以切换到上下左右窗口中;
ctrl+h,j,k,l—-切换到上下左右的窗口中。
F12或:A或:AS,AV,AT或点击头文件后,gf
——–源码文件后,按F12即可以在c/h文件中切换,也可以通过输入:A实现.当使用了gf时,用ctrl+O来回退栈。
F3——将光标定位到要查找的内容上,按下F3,确定要查找的内容和搜索范围
F2——光标定位在需要添加书签的地方,按下ctrl+F2,即添加了书签.使用F2在书签之间正向切换,shift+F2反向切换。
Vimgrep Make ./*.c或在目录层vimgrep “content” **/*.cpp——–配合命令Cl,cn,cp,cw,copen,cclose
建立tags——cmd到源码目录,然后执行(本人环境下)“c:\Program Files\vim\vim73\ctags” -R *
sp,vs,vsp让人很爽的分屏
vi 查找忽略大小写
第一种方法:
/abc\c
第二种方法:
set ignorecase (或者简写 set ic)
linux下安装vim,在源光盘的包目录中依次装吧(前缀是vim-)
X11,common,enhanced,minimal
常用操作总结:
定律:
动作后,都进入插入模式
某些动作是返回了位置,前面可再加动作
动作,位置前都可以配合数值
动作:
i—插入–insert 插入30个x–30ix+esc键
I–当前行开始处插入
a–追加–append
x–删除当前,以字符为单位
X–删除之前
d–删除–delete
y–拷贝–copy
p–粘贴–paste
o–下方插行–open
O–上方插行—open
u–撤消–undo
U–行撤消–undo
Ctrl+r–重做
c–更改–change
r–替换–replace
R–一直替换–replace,退格键是撤消替换
g–前往(gg文件首,G文件尾,数值G到行首)–go
f–查找–find
F–反向查找(向左)–find
t–到达和F区别于定位位置–to
位置:
w–移向下一个单词词首–word
W–同上,移动间隔不是单词而是字串
b–移向上一个单词词首–begin
B–同上,移动间隔包括了标点和符号
e–移向下一个单词词尾–end
E–同上,移动间隔包括了标点和符号
G–文件尾
^–行首非空字符
0–行首第一字符(同于home键,同于_键)
$–行尾,2$即下一行行尾,注意这是一个包括命令,即包括最后一个字符
hjkl–略
H–屏幕范围内的左上角行,zt–head,home
M-屏幕范围内的中间行,zz–middle,大写可就是存盘退出了
L-屏幕范围内的左上角行,zb–last
%–对称符号的匹配定位
月光宝盒:
”–两位置,闪回
配合mark的扩展应用
[]最后修改的位置
Ctrl+o–跳回到更老的地方–older
——-i–跳回到更新的地方—相当于tab
列块选择:
Ctrl+v,可视模式开启,在gvim中是使用ctrl+q
o other end
O 另一个对角
~ 交换大小写
U 转换为大写
u 转换为小写
r 以某个字符填充
> 平移
< 平移
:set shiftwidth=4 "平移距离
J 删除选中行的所有换行符
gv 重复上次的可视选择------------这东东很好用
;–正向(用于f和t,行内查找时)
,–反向(用于f和t,行内查找时)
.–重复
屏幕操作:
ctrl+G–查看当前操作的文件和行数
Set ruler
Set number
Ctrl+u–向上滚半屏–up
Ctrl+d–向下滚半屏–down
——-e–向上多显一行—one line Extra
——-y–向下多显一行
功能就是把当前行放到屏幕的上中下三个位置:(注此时光标不动所在屏幕动)
z+回车
z+.
z+-
前面都可以加行号码,注意不是行数.
当你想把光标放到屏幕的上下三个位置时(注此时屏幕内容不动,光标位置变化)
H
L
简单查询:
/+所查串—正向
?+所查串—反向
备注:
字符 .*[]^%/?~$ 有特殊含义。如果你要查找它们,需要在前面加上一个
“”。
配合使用:
n,N
/<the>—只查找the的句法
%s/old/new/g
简单修改:
x 表示 dl (删除当前光标下的字符)
X 表示 dh (删除光标左边的字符)
D 表示 d$ (删除到行尾)
C 表示 c$ (修改到行尾)
s 表示 cl (修改一个字符)
S 表示 cc (修改一整行)
.–重复最后一次的修改操作
组合拳:
<action>a<object>
和 <action>i<object>
a是包含,i是inside
- action可以是任何的命令,如
d
(删除),y
(拷贝),v
(可以视模式选择)。 - object 可能是:
w
一个单词,W
一个以空格为分隔的单词,s
一个句字,p
一个段落。也可以是一个特别的字符:"、
'、
)、
}、
]。
aw–a word
Is–inner sentence
as–a sentence
q!
e!
w!
一般模式 编辑模式 指令模式
h 左 a,i,r,o,A,I,R,O :w 保存
j 下 进入编辑模式 :w! 强制保存
k 上 dd 删除光标当前行 :q! 不保存离开
l 右 ndd 删除n行 :wq! 保存后离开
0 移动到行首 yy 复制当前行 :e! 还原原始档
$ 移动到行尾 nyy 复制n行 :w filename 另存为
H 屏幕最上 p,P 粘贴 :set nu 设置行号
M 屏幕中央 u 撤消 :set nonu 取消行号
L 屏幕最下 [Ctrl]+r 重做上一个动作 ZZ 保存离开
G 档案最后一行 [ctrl]+z 暂停退出 :set nohlsearch 永久地关闭高亮显示
/work 向下搜索 :sp 同时打开两个文档
?work 向上搜索 [Ctrl]+w 两个文档设换
gg 移动到档案第一行 :nohlsearch 暂时关闭高亮显示
:e#1
:e#2
如果已经分屏
ctrl+W来切换(配合箭头方向键)
执行如下命令:
:.,+499 s/^/#/g
. 代表当前光标所在行
+499 和往后的499行
s/^/#/g 在行首加上#
:10,499 s/^/#/g
10 第十行开始
499 到第499行
其他都是一样的
本人根据以上摸索出多行注释的快捷技巧:
同理
:8,11 s/^////g
因为//是需要转义的,所以把//换成上面的#不就行了。同理要想在行首加入任何字符都是OK了。
正则表达式来查找或高亮:/#注释此为查找#(<w+>)_s*1
后台运算:ctrl+R = 2+2*3 enter
执行后看到结果了吧。
缩写替换:ab [缩写] [要替换的文字]
例子:ab asap as soon as possible
当忘记用root方式打开文件时的保存:
:w !sudo tee %
这会以root方式保存
自动补全:ctrl+n
ggVGg?说是能把全文加密,可是在gvim中没效果。
命令行下比较文件不同:
方法一:vimdiff [文件1] [文件2]
方法二:先用VSP,然后在第一窗口,diffthis,记得用diffoff来退出比较。
按时间回退文件:earlier 1m,文件回退到1分钟以前的状态,:later相反的操作
删除标记内文字:di[标记],这个应该是新瓶装老酒,我相信;di[标记]就是带标记删除了。
把VIM变成16进制编辑器:%!xxd成对的退出命令是:%!xxd -r
把内容变成html来高亮显示:%TOhtml或是%Tohtml(gvim是前者有效)
下面两个转来的参考图