G++编译链接的那些事!G++的特殊使用方法[常用]
2020-04-19 16:00:22来源:博客园 阅读 ()
G++编译链接的那些事!G++的特殊使用方法[常用]
语言 CPP
前言
??虽然 VSCodeC++ 编辑器非常受大家的欢迎,无论是大佬还是小白都说对其爱不释手...
??我...用了一段时间后发现实在是麻烦,配置往往花费我大量时间。可以说真的是吃力不讨好(个人观点,不代表其他人)!所以,用了一段时间后我又默默的用起了自己的 HBuilderX !
??淦! HBuilderX 不是主力前端吗?额~是的,CPP在这里不是很受宠,但没关系啊(主要是真的好用)!CPP的基本语法还是支持的,再加上自己完善了一下“自定义CPP代码块”后更是如虎添翼!HBuilderX NB!
??不过,有个最大的问题就是编译链接!因为 HBuilderX 本身并不是为CPP开发的,所以根本不会有这一功能,更苦的是连个插件都没得...一切都只能靠命令行!
??经过一段时间的摸索,最后打算写一篇总结。力求简洁、明了!
??不定期更新!
??提示:文件结构如下
+-- demo.cpp
|
+-- demo.ico
|
+-- demo.rc
第一章 - 静态编译
手动编译:
- 打开 CMD 命令窗口;
- 执行命令
g++ -c demo.cpp -o step_one.o
; - 执行命令
ar -cr libstep_two.a step_one.o
; - 执行命令
g++ demo.cpp -L. -Istep_two -static -o release.exe
; - 得到 release.exe 应用程序。
注释:
- 原理我不多说了,有兴趣的自行了解!力求简洁、明了!
- step_one 与 step_two 字符可替换;
- release.exe 为输出应用程序的名字;
批处理脚本:
::使用方法 - 直接将 demo.cpp 托入批处理运行即可,也可使用 CMD 命令传参数的方式执行。
@echo off
set start=%1
:get_o
if exist %1 (g++ -c %start% -o step_one.o) else (goto get_o)
:get_a
if exist .\o.o (ar -cr libstep_two.a step_one.o) else (goto get_a)
:get_exe
if exist .\liba.a (g++ %start% -L. -Istep_two -static -o release) else (goto get_exe)
:del
del DEL /F /A /Q step_one.o
del DEL /F /A /Q libstep_two.a
call release.exe
:end
第二章 - 自定义程序 ICO
手动操作:
- 在 demo.rc 文件中添加
id ICON "path/to/my.ico"
; - 执行命令
windres demo.rc -O coff -o demo.res
; - 执行命令
g++ demo.cpp demo.res -o release.exe
; - 得到带 ICO 的应用程序。
注释:
- 原理大致为: 资源文件(.res) + 源文件(.cpp) =编译=> 带资源的应用程序(.exe);
- 第三步也可以使用静态编译:
g++ -c demo.cpp -o step_one.o
->ar -cr libstep_two.a step_one.o
->g++ demo.cpp demo.res -L. -Istep_two -static -o release.exe
。
批处理脚本:
还没写
第三章 - 添加版本信息
手动操作:
- 在 demo.rc 文件中添加
1 VERSIONINFO
FILEVERSION 1,0,0,0 // 文件版本
PRODUCTVERSION 1,0,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080904E4" // 语言(修改前四位)
BEGIN
VALUE "CompanyName", "公司名"
VALUE "FileDescription", "文件描述"
VALUE "FileVersion", "1.0"
VALUE "InternalName", "内部名称"
VALUE "LegalCopyright", "版权"
VALUE "OriginalFilename", "原始文件名"
VALUE "ProductName", "产品名称"
VALUE "ProductVersion", "产品版本"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x809, 1252 // 翻译
END
END
- 执行命令
windres demo.rc -O coff -o demo.res
; - 执行命令
g++ demo.cpp demo.res -o release.exe
; - 得到带版本信息的应用程序。
注释:
- .RC 文件使用的是微软定义的脚本语言;
- 更改语言时需要同时更改 “语言” 和 “翻译” 两处内容。“语言” 行("080904E4")修改前四个数字;“翻译” 行(0x809)修改后三位数字。
- Example: 简体中文的 langID 为 0x0804
- 修改“语言”行前四位为 “0804”;
- 修改“翻译”行后三位为 “804”;
- 修改“语言”信息为“简体中文”。
- Example: 简体中文的 langID 为 0x0804
- .RC资源文件详情请参考MSDN。
原创说明
本文原作者:SeaFever
转载请留言!
原文链接:https://www.cnblogs.com/seafever/p/12660507.html
原文链接:https://www.cnblogs.com/seafever/p/12660507.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++生成随机数
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- C++ 函数和链接性 2020-05-18
- C++ 静态持续变量 2020-05-10
- C++ 单独编译 2020-05-10
- gcc/g++ 链接顺序注意事项 2020-04-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash