IT评测·应用市场-qidao123.com技术社区
标题:
< IDE编程环境设置>
[打印本页]
作者:
海哥
时间:
2024-10-6 19:39
标题:
< IDE编程环境设置>
IDE编程环境设置
LIB,DLL区别
我们在写项目时会链接(调用)第3方库,或者好比在vs的解决方案solution创建项目project时,不仅可以开发可执行程序exe(可单独运行)(windows/控制台 应用程序),也可以开发自定义库(不可单独运行,只能在应用程序被调用)(DLL动态库,LIB静态库)
库是一个二进制文件,包含了源文件中(.cpp 或 .c),头文件相反,头文件仅包含声明信息
静态库(.lib静态库文件)
静态库存储了实际的数据和函数
当编译器链接库时,会从库中复制这些函数,并和我们的应用程序一起组合为exe可执行文件,终极的可执行文件exe会比力大
发布时仅发布这个可执行文件就行
静态链接库中不能再包含其他的动态链接库或者静态库
动态库(.dll动态库文件)辅助文件:(lib引入库/导入库文件)
引入库文件(.LIB)包含DLL
导出的
函数和变量的符号名,而.DLL文件包含该DLL实际的函数和数据
编译时仅必要链接LIB引入库文件,DLL中的函数代码和数据并不可复制到可执行文件
运行时,会根据LIB的地址符号表,从DLL库查找导出的函数
发布时不仅要发布这个可执行文件,也要发布DLL动态库文件
动态链接库中还可以再包含其他的动态或静态链接 库
优点:
内存优化:只有exe调用了函数时,才会被加载到内存中,从而可以减少exe文件的巨细
代码共享/模块化/跨平台兼容性/插件支持:由于并非像静态库一样被复制到exe中,而是调用了什么什么就被加载,因此有较高的灵活性
VSIDE中LIB,DLL库设置
DLL
使用时只能使用dll中导出的函数,未导出的函数只能在dll内部使用
隐式毗连
必要三个文件
*.h头文件
必要include 包含导出函数的头文件
可以直接写绝对路径
可以拷贝到src源码目次下
也可以设置项目属性,VC++目次->包含目次,或者,C/C++->通例->附加包含目次
lib引入库
可以添加到项目project中,确保选中目标项目,选中要添加的库:”添加”–>”现有项”–>选择lib文件
可以设置项目属性,链接器->通例->附加库目次,然后,链接器->输入->附加依靠项(库名)
DLL库
直接拷贝,将dll拷贝到运行时目次,与调用者exe文件在同一目次
可以设置项目属性,VC++目次->可执行目次,而且,调试 ->工作目次
LIB
*.h头文件
.lib静态库
……和上述一样
DLL库使用
我们要手动控制dll中函数哪些被导出,哪些仅在内部使用,
而且是被导出还是导入,在生成dll的时候我们盼望导出,在使用dll时则时盼望导入符号
__declspec关键字可以作用于,类,函数,变量
_
declspec(dllimport) 导入
__declspec(dllexport)导出
使用时通常通过宏,如果项目定义了DLLEXPORT导出宏,那么宏_DLL_DECLARE_ 即为导出
否则_DLL_DECLARE_为导入
#ifdef DLLEXPORT
#define _DLL_DECLARE_ declspec(dllexport)
#else
#define _DLL_DECLARE_ declspec(dllimport)
复制代码
名词
编译器:可以完成从预编译编译,汇编,链接整个过程,将高级编程语言(如C、C++、Java等)编写的源代码转换为机器语言,使得高级语言编写的文件可以或许被计算机执行
编译器执行过程:
预编译(Preprocessing)
使用g++的-E选项将hello.cpp和包含的头文件预编译为hello.i
编译(Compilation)
使用g++的-S选项将hello.i编译为汇编代码文件hello.s
汇编(Assembly)
使用g++的-c选项将hello.s汇编为目标文件hello.o(翻译为机器指令)
链接(Linking)
使用g++将hello.o链接为可执行文件hello.exe
g++ main.cpp -o main
复制代码
IDE(Integrated Development Environment)集成开发环境:它集成了代码编辑器、编译器、调试器、图形用户界面工具等多种功能,使得开发者可以在一个统一的界面中完成代码编写、编译
(例如vs中的build构建)
、调试、运行等所有开发任务。
GNU:操纵系统,包含GCC(编译器),Linux内核,和其他的GNU工具集(Emacs编辑器,GDB调试器等)
GCC(GNU Compiler Collection,GNU编译器集合)编译器:支持多种编程语言(如C、C++、Objective-C、Fortran等)和多种计算机体系结构(如x86、ARM等)GCC/G++编译器:GCC专门编译C语言,G++专门编译C++语言
MSVC(Microsoft Visual C++)编译器:微软公司开发专有的C++编译器,提供了丰富的库和工具来支持Windows平台的应用程序开发,被Visual Studio IDE所集成
MinGW(Minimalist GNU for Windows)编译器:包罗GCC编译器和实用于Windows的头文件和库,开源,跨平台性
运行时库:支持程序运行的根本函数的集合,一样平常是静态库lib或动态库dll。
SDK:软件开发工具包
构建工具:
对于大型项目,手动列出所有源文件编译,大概会变得繁琐且容易出错,为了防止每次编译都要执行大量的命令,我们使用构建工具,
负责整个项目的构建过程,包罗调用编译器、链接器、测试框架等,它们通常会读取项目设置文件(如Makefile、CMakeLists.txt、Premake脚本等),这些文件定义了项目的结构、依靠关系、构建步骤等,然后调用系统编译器进行项目构建
这样只用使用make等命令,就可以编译链接项目设置文件里设置的文件了
make构建工具:适合简朴的、不必要跨平台的项目构建,
Cmake构建工具:跨平台,自定义语言,适合必要跨平台支持的大型项目,提供了丰富的功能和更好的可维护性。
Premake构建工具,跨平台,lua语言,提供了高度的灵活性和可扩展性,实用于各种规模和复杂度的项目。
在Window通过命令行使用MSVC编译C++项目
下载MSVC:
在window系统中,包含MinGW和MSVC编译器,如果想要使用MSVC,首先应下载(Visual Studio Installer(集成MSVC),再选择单个组件(MSVC和SDK)安装)
设置Path环境变量和测试:
参考下载MSVC和Path设置和测试
参考Path设置和测试创建项目:
在某盘创建一个文件夹,创建一个main.cpp文件,输入c++代码
编译:
cl main.cpp(自定义文件名)
复制代码
使用MSVC的cl编译命令,就可以编译为exe文件了
如果是MinGW的化必要使用g++命令
运行:
main.exe
复制代码
到此如果成功输出代码运行效果,MSVC就在window上设置成功了
vscodeIDE使用MSVC的cl.exe编译C++项目(单文件/多文件)
官方文档
不同于vs,设置相对麻烦些
设置编译器:
方法一:
根据上述设置好vscode使用的编译器(MSVC)的Path
方法二:
在linux和mac下gcc或者clang都是直接可以在全新的shell中敲指令的,但是在windows的powershell/cmd 中,MSVC的编译器无法直接使用
如果想要使用可以设置path,但由于MSVC的path设置很多,为了省事其实我们可以直接启用(Developer Command Prompt)
它主动包含Visual Studio的路径和其他必要的环境变量,使得开发者可以直接使用Visual Studio的库和工具(如编译器、链接器和构建工具等),而无需手动设置环境变量。
在终端中可以通过一下命令检查环境变量是否导入,如果能见到一大堆东西,则导入成功
在cmd中
echo %INCLUDE%
复制代码
在PowerShell中
echo $env:INCLUDE
复制代码
通过code命令打开vscode
设置插件:
安装扩展"C/C++“
创建测试项目:
在某盘创建一个文件夹并用vscode打开,
创建一个main.cpp文件,func.cpp,add.h,统共3个测试文件
创建obj目次负责输出.o文件,
创建build目次创建debug文件,负责设置信息,这里指定了输出目次和名词,指定了编译的源文件
/Fe:"bin\hello" /MTd src\main.cpp src\func.cpp
复制代码
创建bin负责输出exe文件
设置文件:
.vscode:
用于存储与项目相关的设置信息,(如下)
settings.json
:
用于存储用户级别的设置或项目级别的设置,可以在这里设置编辑器的一些举动
configuration.json:设置项目
F1->Edit configuration(JSON)
重要用于设置、编译器路径、头文件搜索路径、IntelliSense智能感知(代码主动补全、语法检查等)等信息
name
:设置的名称,通常用于标识不同的设置,如 "Win32"、"Linux" 或 "Custom" 等。
includePath
:指定头文件搜索路径的列表。VS Code 会在这些路径中搜索 #include 指令引用的头文件。支持使用占位符和环境变量,如 ${workspaceFolder} 表现当前工作区的根目次。
defines
:定义预处置惩罚器宏的列表。这些宏会在IntelliSense引擎解析代码时被使用,模拟编译器预定义宏的效果。
compilerPath
:指定C/C++编译器的路径。VS Code将使用这个路径来获取编译器相关信息,如系统包含路径和默认定义,以启用更正确的IntelliSense。
intelliSenseMode
:设置IntelliSense模式,通常根据编译器和架构选择。常见的值包罗 gcc-x64、gcc-arm64、msvc-x64、clang-x64 等。
cStandard
和
cppStandard
:分别设置用于IntelliSense的C和C++语言标准版本。例如,c11 表现C11标准,c++17 表现C++17标准。
browse
:设置用于欣赏代码时的额外选项,如搜索路径和符号数据库的设置。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${env:INCLUDE}"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "D:\\VisualStudioSetup3\\VC\\Tools\\MSVC\\14.36.32532\\bin\\Hostx64\\x64\\cl.exe", /* 编译器路径 */
"windowsSdkVersion": "10.0.22000.0",
"cStandard": "c17",
"intelliSenseMode": "windows-msvc-x64",
"compilerArgs": [ /* 编译器参数 */
"-fexec-charset=GBK"
]
}
],
"version": 4
}
复制代码
tasks.json:设置任务
Terminal->Configure task->create tasks,json file from template->others
用于定义任务(Tasks),这些任务可以是编译代码、运行测试、清理输出目次等
键值备注“label”“……”标签值。用于VSCode识别你的任务,相当于给任务起个名。“type”“shell”任务类型。shell(控制台程序),process(任务将作为一个独立的进程运行)。“command”“cl” 要执行的命令。这里我们就是msvc的编译器cl
“args”“……” 为你的指令加上各种参数。/Fo是输出目次,/Fe是重定名
"/Zi":生成包含程序数据库(.pdb)的完整调试信息的程序。
"/Od":禁用优化。这有助于调试,由于生成的代码更接近源代码。
"/EHsc":启用C++异常处置惩罚,而且假定使用标准C++异常处置惩罚机制。
“problemMatcher”“$msCompile” 问题匹配器。这告诉VS Code如何从任务输出中解析错误和告诫。$msCompile是一个预定义的模式,用于匹配Microsoft编译器的输出。
“detail”“…balabala”任务的细节说明,方便日后VSCode用它来提示你。
"group":
”任务分组信息
/* 任务集:包含若干任务,每个任务具有一些字符串形式的键或者属性 */
{
"tasks": [
{
"label": "build debug Win32", /* 标签 */
"type": "shell", /* 任务类型 */
"command": "cl", /* 调用指令 */
"args": [
// "/Fe: bin\",
"@build\\Debug",
"/Fo:obj\",
"/Zi",
"/Od",
"/EHsc",
// "src\\main.cpp"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$msCompile"
]
}
]
}
复制代码
launch.json:设置调试器
用于设置调试器,定义如何启动和调试应用程序
{
"version": "0.2.0",
"configurations": [
{
"name": "cl.exe - 生成和调试活动文件",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/hello.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"preLaunchTask": "build debug Win32" // 确保这个任务名称与 tasks.json 中的一致
}
]
}
复制代码
编译,运行和调试
编译:Terminal->Run Task->build debug Win32
运行/调式:Run->Start Debugging/F5
输出效果
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4