当前位置:   article > 正文

VSCODE + MinGW(cmake) 配置C++编译调试环境,创建demo,静态库,动态库(以及附带常用makelist设置) 傻瓜一站式教程 解决中文乱码问题_vscode mingw

vscode mingw

关于本帖的各个模块组成先解释一下

 vscode本质上是个编辑器,只能用于编辑文本,本体功能类似于notpad++,它并不是个像 vs那样的集成开发环境,MinGW是将g++等一系列用于在linux上编译c/c++的编译器适配到windows平台的编译器,windows平台有自己的编译器叫msvc不过用vscode的人一般不用msvc

cmake是用于生成makelist文件的构建器,makelist的作用是简化makefile的书写.

编译程序最终调用的是make指令,这个对应的是makefile,makefile可以人为书写,不过语法相对难懂,可以通过cmake生成的makelist来自动生成makefile,makelist的语法就简单多了

这里附上一篇个人感觉很全的cmake教程(虽然我本人也并没有全部看完)

cmake 教程

好了知道上面的模块了,就可以进入主题了(关于如何安装vscode跟配置minGW的环境变量这个我就不写了,网上太多了),这里说几个vscode插件

C/C++  Cmake Tools必须安装,其余的随意,有些插件就是改变了目录的颜色,这些可以自己去找找,跟本文主旨无关

首先声明,本人使用vscode编译C++时间甚短,关于vscode的很多配置不是很明白,不过以下的示例都经过验证,可帮助小白快速入手

vscode在调试程序这块关于工作区的问题

一简易使用篇: 直接使用g++指令编译程序

如图:

 将如下代码拷贝到新建的cpp文件内

  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4. cout << "hello echo" << endl;
  5. system("pause");
  6. }

此时你的工作区应该是这样的(除了.vscode文件夹)

 关于这个.vscode文件夹其实不必太过关心,用多了自然就知道是干嘛的,主要就是存放launch.json,tasks.json等启动,调试,任务文件的.

下面手动创建.vscode目录

 然后将如下文件复制到.vscode目录下(文件名不要出错)

 c_cpp_properties.json (修改compilerPath)

  1. {
  2. "configurations": [
  3. {
  4. "name": "MinGW64",
  5. "intelliSenseMode": "gcc-x64",
  6. "compilerPath": "D:/C++IDE17_19_22/vscode/mingw64/bin/gdb.exe",
  7. "includePath": [
  8. "${workspaceFolder}"
  9. ],
  10. "cppStandard": "c++17"
  11. }
  12. ],
  13. "version": 4
  14. }

launch.json (注意program,cwd,miDebuggerPath)

  1. {
  2. "version": "0.2.0",
  3. "configurations":
  4. [
  5. {
  6. "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
  7. "type": "cppdbg", // 配置类型,这里只能为cppdbg
  8. "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
  9. "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",// 将要进行调试的程序的路径
  10. "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
  11. "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
  12. "cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
  13. "environment": [],
  14. "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
  15. "MIMode": "gdb",
  16. "miDebuggerPath": "D:/C++IDE17_19_22/vscode/mingw64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
  17. "preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
  18. "setupCommands":
  19. [
  20. {
  21. "description": "Enable pretty-printing for gdb",
  22. "text": "-enable-pretty-printing",
  23. "ignoreFailures": true
  24. }
  25. ]
  26. }
  27. ]
  28. }

tasks.json(注意command, options)

  1. {
  2. // See https://go.microsoft.com/fwlink/?LinkId=733558
  3. // for the documentation about the tasks.json format
  4. "version": "2.0.0",
  5. "tasks": [
  6. {
  7. "type": "shell",
  8. "label": "g++", //这里注意一下,见下文
  9. "command": "D:/C++IDE17_19_22/vscode/mingw64/bin/g++.exe",
  10. "args": [
  11. "-g",
  12. "${file}",
  13. "-o",
  14. "${fileDirname}\\${fileBasenameNoExtension}.exe",
  15. "-ggdb3", // 生成和调试有关的信息
  16. "-Wall", // 开启额外警告
  17. "-static-libgcc", // 静态链接
  18. "-std=c++17", // 使用c++17标准
  19. "-finput-charset=UTF-8", //输入编译器文本编码 默认为UTF-8
  20. "-fexec-charset=GB18030", //输出exe文件的编码
  21. "-D _USE_MATH_DEFINES"
  22. ],
  23. "options": {
  24. "cwd": "D:/C++IDE17_19_22/vscode/mingw64/bin/"
  25. },
  26. "problemMatcher": [
  27. "$gcc"
  28. ],
  29. "presentation": {
  30. "echo": true,
  31. "reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never
  32. "focus": false,
  33. "panel": "shared" // 不同的文件的编译信息共享一个终端面板
  34. },
  35. }
  36. ]
  37. }

这几个文件大概的功能这里说明一下

C_Cpp_Properties.json是用于配置编译器环境的,包括启动器代号、位数(这些是自定义的)、编译选项、启动设置、编译模式等。includePath指向C/C++标准库、用户头文件所在位置。
不需要CMake也可以直接编写C/C++

launch.json是vscode用于调试的配置文件,比如指定调试语言环境,指定调试类型等等,这个文件在首次运行F5(跟vs相同的调试指令)时会让你创建该文件

tasks.json 这个配置文件是用来执行你预定的任务的,比如说你修改了你的代码,调试之前,肯定要重新生成新的程序后再调试,那么你就可以配置它告诉vscode怎么重新生成这个新的程序

vscode就是先跑 tasks.json 任务,再跑 launch.json。

下面就运行tasks.json, (组合键 ctrl + shift + p  或者直接F1键)

 这里的g++就是tasks.json的lable的名字

 可以看到生成了test.exe文件

下面进行调试,直接F5进入调试(记得打断点)

以上

二项目篇 cmake构建项目

这里准备做的是创建一个dll项目,一个demo项目,使用demo调用dll的导出函数,当然了,不想看dll的可以略过部分内容

好了跟上面一样先创建一个目录用于存放demo跟dll文件夹,我这里创建的是wook6,参照上面的方法,先给wook6文件夹添加工作区,然后在wook6文件夹里面创建bin目录,demo目录,dll目录,此时的工作区如下(除了.vscode目录)

这时候在wook6目录下,也就是在wook6工作区中存在bin,demo,dll三个文件夹,由于vscode的命令面板执行的各种任务仅能在当前工作区生效,因此为了让demo项目在demo文件夹下生成,dll项目在dll文件夹下生成,需要为demo,dll文件夹分别添加工作区,添加工作区的方法如下

 上面的步骤执行结束后,vscode的目录如下

 那么现在发生什么事了呢,可以通过 ctrl + r 切换工作区,现在把工作区切换回wook6

 此时的目录如下

 这样一来就可以通过切换工作区的方式来指定vscode当前的工作目录

好了,按照这个方法,把demo文件夹也添加工作区

下面开始通过cmake构建demo项目

ctrl+ r 进入 demo工作区,F1或者 ctrl + shift + p 打开命令面板 ,选择cmake入门

选择你配置的mingw GCC编译版本

 输入项目名字,这里是demo

 选择下面Executable ,创建exe程序,上面这个library是用于创建链接库程序,如lib库跟dll库

 执行完上面的步骤后目录应该如下

 这个目录下面的文件由cmake构建创建,CmakeLists.txt就是cmake的语法文件,用于生成makefile文件的(此时没有.vscode目录没关系),现在cmake已经为我们构建出项目了,接下来要做的就是执行cmake指令,编译出我们的程序

main.cpp就是本项目唯一的源文件,里面就是默认的 打印hello world,没什么可多说的

如何执行cmake指令呢

通过F1或者组合键打开命令面板,选择配置任务

 在列表最下面找到使用模板创建tasks.json文件

 选择maven

 此时在demo目录下面会生成.vscode目录,且在该目录下有tasks.json文件

看看此时的tasks.json文件内容是什么

 这内容并没什么用,不过这个文件有用,vscode通过检索.vscode目录下的tasks.json文件来执行指令,label就是指令的名字,下面将如下语句替换到 label : test 的 command下

cd ${workspaceFolder}/build ; Remove-Item -r CMakeFiles ; cmake .; make

 此时应为

 可以看到tasks.json中使用的类型是shell,准确的说是windows下的powershell,所以command后面加的就是powershell的指令,这条指令什么意思呢,就是进入当前工作区的build目录,删除CMakeFiles文件夹,然后执行cmake根据当前目录配置生成makefile,再调用make指令执行makefile文件构建项目,关于这条指令可能会出现错误的地方是 删除文件夹部分,这个自己根据shell还是cmd自行修改

可以看到我上面把任务的名字改成了test-demo-build,下面就执行这个任务

还是通过命令面板

 

 这两个任务就是在tasks.json中配置的,不过因为我们只配置了一个任务,另一个任务目前是无意义的,选择执行test-demo-build

 下面验证下生成的demo.exe是否可以运行,当然了有两种方法

一是直接在命令行执行,如下,右击build目录,将其在集成终端打开

可以看到vscode为我们新起了一个powershell终端,且运行目录也在build下

 输入 ./de 之后可通过tab键补全名称,回车键确认,执行完是这样

 注意,ps是powershell的简称

可以看到生成的demo.exe文件可以执行,当然了最粗暴的方式是直接在文件夹下双击运行,不过默认的main.cpp没有加暂停功能,运行程序会一闪而过,想要通过此方式查看运行效果可以在main.cpp中添加 system("pause")代码,不过添加该代码后在命令行运行会出现无法关闭demo.exe的bug,如果出现该bug可在任务管理器里强制关闭demo.exe进程,当然了这些都是题外话,是我遇到的一些坑,你不一定会遇到,不知道也没关系

二调试执行demo.exe程序

 通过该步骤可以生成launch.json文件,将如下复制粘贴,需注意miDebuggerPath

  1. {
  2. // 使用 IntelliSense 了解相关属性。
  3. // 悬停以查看现有属性的描述。
  4. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  5. "version": "0.2.0",
  6. "configurations": [
  7. {
  8. "name": "(gdb-demo) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
  9. "type": "cppdbg", // 配置类型,这里只能为cppdbg
  10. "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
  11. "program": "${workspaceFolder}/build/demo.exe",// 将要进行调试的程序的路径
  12. "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
  13. "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
  14. "cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
  15. "environment": [],
  16. "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
  17. "MIMode": "gdb",
  18. "miDebuggerPath": "D:/C++IDE17_19_22/vscode/mingw64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
  19. "preLaunchTask": "test-demo-build", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
  20. "setupCommands": [
  21. {
  22. "description": "Enable pretty-printing for gdb",
  23. "text": "-enable-pretty-printing",
  24. "ignoreFailures": true
  25. }
  26. ]
  27. }
  28. ]
  29. }

好了现在可以调试程序了,vscode跟vs的调试命令完全一样,通过F5调试

 可以看到调试成功,vscode进入断点

好了以上关于demo项目的配置就全部结束了,注意,目前的编译,调试都是在demo的工作区内完成的,下面要切换工作区到dll

通过ctrl + r切换工作区

通过cmake构建dll项目

构建dll跟构建demo项目基本一样,这里只用文字说明进行了那些步骤,具体执行后的结果可参照demo的构建

首先确认当前的工作区已经切换到dll目录,F1(ctrl + shift + p)打开命令面板,选择CMake:快速入门,

输入项目名字,dll,选择创建library项目

 此时项目应该如上

如果你知道C++的链接库知识应该会产生疑惑,C++的链接库分为两种,一种是lib(a)库,也就是静态库,采用的是编译时链接,仅能在C/C++语言内部使用, 一种是dll(so)库,也就是动态库,采用的是运行时链接,支持其他多种语言调用,我们这里创建的是dll,为什么没有什么设置之类的,如何确定生成的是动态库呢,好带着这个疑问接下去慢慢看

如果熟悉C++链接库的知识,应该知道,C++链接库有两种链接方式,其中一种隐式调用链接库的方式就需要有库的头文件,目前的项目里面仅有一个cpp源文件,因此还需手动创建一个头文件(如果用显示调用方式则不需要头文件,但是需要用到loadlibaray,getaddress之类的函数获取接口的地址)

下面创建dll.h头文件,内容如下

  1. #ifndef DLL_H
  2. #define DLL_H
  3. void say_hello();
  4. #endif

接下来通过命令面板,给dll项目添加tasks.json,步骤跟创建demo项目时一样  : F1 -> 任务:配置任务 ->使用模板创建tasks.json文件 -> maven

将cd ${workspaceFolder}/build ; Remove-Item -r CMakeFiles ; cmake .; make 替换进去,如下

 运行这个test  task(在命令面板 -> 任务:运行任务->test),然后去build目录下找生成的文件,如下图

  

 可以看到此时生成了一个后缀式.a的文件,说明这是生成了静态库文件,既然生成了,那就调用一下看看这个文件能不能使用吧

将工作区切换到wook6,即最开始的目录下,如图

 如何让demo调用dll生成的库文件呢,下面需要修改demo项目的cmakelists,内容如下

  1. #当前工作目录
  2. MESSAGE(STATUS "Current path : ${CMAKE_CURRENT_SOURCE_DIR}")
  3. cmake_minimum_required(VERSION 3.0.0)
  4. project(demo VERSION 0.1.0)
  5. #链接库的目录,可用相对路径
  6. link_directories(../dll/build)
  7. #配置头文件目录
  8. include_directories(../dll)
  9. add_executable(demo main.cpp)
  10. #链接使用的库
  11. target_link_libraries(${PROJECT_NAME} libdll.a)
  12. set(CPACK_PROJECT_NAME ${PROJECT_NAME})
  13. set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})

上述设置了demo项目将要使用的库目录,库文件目录以及链接库命令

在demo项目的main.cpp文件中修改如下

  1. #include <iostream>
  2. #include "dll.h"
  3. int main(int, char**)
  4. {
  5. using namespace std;
  6. std::cout << "Hello, world!\n";
  7. say_hello();
  8. system("pause");
  9. }

下面将工作区切换到demo,F1运行编译任务,在F5运行调试任务,具体运行结果如下

上面表明demo调用dll生成的静态库文件成功

那么问题来了,我需要生成的是动态库,这里为什么生成的是静态库呢,下面通过修改cmake指令编译生成动态库

指定dll项目为动态库项目

好了现在将工作区切换到dll

修改dll的cmakelist如下

  1. cmake_minimum_required(VERSION 3.0.0)
  2. project(dll VERSION 0.1.0)
  3. include(CTest)
  4. enable_testing()
  5. #[[命令:add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
  6. libname:生成的库文件的名字
  7. ​[SHARED|STATIC|MODULE]:生成库文件的类型(动态库|静态库|模块)
  8. [EXCLUDE_FROM_ALL]:有这个参数表示该库不会被默认构建​
  9. source2 ... sourceN:生成库依赖的源文件,如果源文件比较多,可以使用​aux_sourcr_directory命令获取路径下所有源文件.]]
  10. add_library(dll SHARED dll.cpp)
  11. set(CPACK_PROJECT_NAME ${PROJECT_NAME})
  12. set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
  13. include(CPack)

注意cmake默认生成静态库项目,动态库需显式指定

下面执行dll的编译task,结果如下

 好了现在问题来了,为什么出现了两个.a文件,一个.dll文件 ,还有为什么是.a

先说为什么是.a 

.a .so是linux系统下的库后缀名,分别对应windows下的.lib,.dll ,因为这里使用minGW进行编译的原因,该平台移植自linux,所以中间文件沿用的.a后缀,可以看到最终文件动态库使用的是.dll,因为.a文件在编译时被链接进程序,成为程序的代码,可以不明确区分操作系统版本,只要你的编译器认识就行,而在运行过程中,需要操作系统去加载动态库,所以这里还是以windows认识的.dll后缀作为动态库文件名

这涉及到链接库的知识,这里简单说明一下: 动态库在被链接时有两种方式,具体的调用方法参考如下链接  动态库库的两种链接调用方式

可以看到,动态库也有一个相应的.lib库,这个库准确的讲不能叫静态库,叫动态库导入库,里面仅有动态库的符号表及函数地址,跟真正的静态库完全不同

好了上面生成了动态库,下面还是把工作区切换到demo,仅需修改makelist中链接库的名字即可

执行编译指令,生成成功

注意,动态库的使用需要将dll文件放置到demo.exe同一目录层级,将libdll.dll拷贝到demo.exe目录

 F5执行launch任务,如下

 上述表示demo调用动态库文件成功,并对demo进行了调试

好了现在本教程已经完成了绝大部分了,还有最最重要的一步,调试动态库

最后一步,调试动态库

调试动态库需要稍微修改demo代码以便于让调试器可以附加进入demo程序,修改后如下

  1. #include <iostream>
  2. #include "dll.h"
  3. int main(int, char**)
  4. {
  5. using namespace std;
  6. cout << "请选择输入数字执行指令" << endl;
  7. cout << "0 -------------- 退出程序" << endl;
  8. cout << "1 -------------- 调用动态库接口say_hello()" << endl;
  9. int in = 10086;
  10. while (in != 0)
  11. {
  12. cout << "输入数字:" ;
  13. cin >> in;
  14. if(in == 1)
  15. {
  16. say_hello();
  17. }
  18. else if (in == 0)
  19. {
  20. break;
  21. }
  22. }
  23. return 0;
  24. }

好了修改完后进行编译任务,并F5运行一下,可以看到如下问题

中文出现乱码,这是编码问题,vscode默认使用UTF-8编码,而windows的cmd窗口默认使用本地编码,因为我切换了windeos语言为中文系统,所以默认的是ANIS码,也就是GBK,虽然从主流上讲,使用UTF编码更适合跨平台项目(多数平台默认宽字符编码UTF-8),不过国内的软件开发多数使用的编码仍然是GBK,关于GBK,GB2312 ,GB18030,只要知道是后者兼容前者

下面给makelist添加如下设置

#设置以本地GBK编码编译程序,解决中文乱码问题
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -finput-charset=GBK")
#设置输出文件编码为GBK,解决中文乱码问题
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")

为什么这样设置,选择打开任何带有代码的文件,可以看到如下

 说明vscode默认使用UTF编码来保存文件,上述第一条就是告诉编译器,编译文件编码全部是GBK      设置编码参考

下面那条命令告诉编译器将生成文件的所有输出改成GBK编码

将main.cpp编码改成GBK

如此设置后如下图

接下来运行编译任务和调试任务

 好了,现在demo已经改好了,下面要对动态库进行调试

将工作区切换到dll

在.vscode中创建launch.json文件,内容如下

  1. {
  2. // 使用 IntelliSense 了解相关属性。
  3. // 悬停以查看现有属性的描述。
  4. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  5. "version": "0.2.0",
  6. "configurations": [
  7. {
  8. "name": "dll_attach", // 配置名称,将会在启动配置的下拉菜单中显示
  9. "type": "cppdbg", // 配置类型,这里只能为cppdbg
  10. "request": "attach", // 请求配置类型,可以为launch(启动)或attach(附加)
  11. "program": "D:/vscode-workspace/wook6/demo/build/demo.exe",// 将要进行调试的程序的路径
  12. "processId": "${command:pickProcess}",
  13. "MIMode": "gdb",
  14. "miDebuggerPath": "D:/C++IDE17_19_22/vscode/mingw64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
  15. //"preLaunchTask": "test-demo-build", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
  16. "setupCommands": [
  17. {
  18. "description": "为 gdb 启用整齐打印",
  19. "text": "-enable-pretty-printing",
  20. "ignoreFailures": true
  21. },
  22. {
  23. "description": "将反汇编风格设置为 Intel",
  24. "text": "-gdb-set disassembly-flavor intel",
  25. "ignoreFailures": true
  26. }
  27. ]
  28. }
  29. ]
  30. }

dll调试实在难以搞定,暂无教程

附录: 常用的cmake指令

#设置c++编译器
set(CMAKE_CXX_COMPILER "g++")

#CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置;
#CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置;
#LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有指定 CMAKE_ARCHIVE_OUTPUT_DIRECTORY 则存放在该目录下,动态库也类似;
#CMAKE_RUNTIME_OUTPUT_DIRECTORY:存放可执行软件的目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ../../test)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../../test)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../../test)

#设置可执行文件的版本为debug还是release
set(CMAKE_BUILD_TYPE "Debug")
#set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
add_definitions(-std=c++11)


#定义变量,存储当前目录下的所有源文件
aux_source_directory(. ALL)
#当源文件较多时,通过设置变量来指定需要编译的源文件
set(GIVEN_LIST dll.cpp)

#[[命令:add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
libname:生成的库文件的名字
​[SHARED|STATIC|MODULE]:生成库文件的类型(动态库|静态库|模块)
[EXCLUDE_FROM_ALL]:有这个参数表示该库不会被默认构建​
source2 ... sourceN:生成库依赖的源文件,如果源文件比较多,可以使用​aux_sourcr_directory命令获取路径下所有源文件.]]
#add_library(dll SHARED dll.cpp)
#add_library(dll SHARED ${GIVEN_LIST})
add_library(dll SHARED dll.cpp)


#重定义输出dll的名字
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "dll")   #重命名后的文件名前面依旧会加上lib三个字符

#2、设置cmake编译语言
set(CMAKE_CXX_STADARD 11)
#启用语法检查
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(dllTest VERSION 0.1.0)

#设置c++编译器
set(CMAKE_CXX_COMPILER "g++")

#6、WIN特有的bug,windows.h会定义下面两个宏,导致std::min和std::max用不了,所以要添加
if(WIN32)
    add_definitions(-DNOMINMAX -D_USE_MATH_DEFINES)
endif()


#设置以本地GBK编码编译程序,解决中文乱码问题
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -finput-charset=GBK")
#设置输出文件编码为GBK,解决中文乱码问题
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")

#链接库的目录,可用相对路径
#link_directories(./)
#配置头文件目录
#include_directories(../dll)
#设置可执行文件的版本为debug还是release
set(CMAKE_BUILD_TYPE "Debug")
#set(CMAKE_BUILD_TYPE "Release")
#生成调试文件
#set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
#set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
#add_definitions(-std=c++11)

#CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置;
#CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置;
#LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有指定 CMAKE_ARCHIVE_OUTPUT_DIRECTORY 则存放在该目录下,动态库也类似;
#CMAKE_RUNTIME_OUTPUT_DIRECTORY:存放可执行软件的目录
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ../../bin)
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../../bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../)


add_executable(dllTest main.cpp)

#链接使用的dll库
#target_link_libraries(${PROJECT_NAME} libdll.dll.a)

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/799395
推荐阅读
相关标签
  

闽ICP备14008679号