建立开发所需要的项目文件夹
创建如下目录结构:
├── bin
├── build
├── docs
│ ├── excel
│ └── json
├── lib
├── src
└── third_party
bin文件夹:用于存放可执行文件
build文件夹:用于存放cmake编译后的文件
docs文件夹:用于存放输入文件,如excel和json数据或者项目说明等文本
lib文件夹:存放cmkae生成的动态库和静态库
src文件夹:存放工程所需要的代码
third_party文件夹:存放三方库
vscode编译和调试
在vscode中打开建立的文件夹,在src中添加main.cpp文件
在main函数中写入代码:
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello World"<<endl;
return 0;
}
生成tasks.json文件
tasks.json文件用来进行编译
tasks.json配置步骤:
1、点击菜单栏的终端,选择配置默认生成文件
2、c++就选择g++的编译器/usr/bing/g++ 纯c语言就选择/usr/bing/gcc
3、这样就自动生成了一个tasks.json文件(左边资源管理器的.vscode中)
tasks.json文件中只需要修改”args“部分。
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: /usr/bin/g++"
}
]
}
”-g“部分存放所有的cpp文件
如"${workspaceFolder}/src/*.cpp", 表示在根目录的src文件夹中的所有cpp文件
”-o“部分指定输出文件的路径
"${fileDirname}/${fileBasenameNoExtension}"表示当前文件的路径
如"${workspaceFolder}/bin/${fileBasenameNoExtension}", 表示指定输出文件为在根目录的bin文件夹中
.h文件的添加将在后面提到
"-I+文件路径",
完成之后就可以点击右上的三角形进行运行了
生成launch.json文件
launch.json文件用来进行调试
launch.json配置步骤
1、点击菜单栏的运行,然后点击添加配置就会自动生成一个lauch.json文件
2、然后再次点击添加配置,在json文件中选择(gdb) 启动 就会自动生成文件内容
3、将"program": "输入程序名称,例如 ${workspaceFolder}/a.out",修改成"program": "${fileDirname}/${fileBasenameNoExtension}",也可以按他例如的那样进行修改${fileDirname}/${fileBasenameNoExtension}表示用当前函数的函数名来命名
完成之后就可以点击右上的三角形进行调试了
建立函数文件夹
在src文件夹中新建一个test的文件夹 在test文件夹中添加test.h和test.cpp文件
test.h
#include <iostream>
using namespace std;
void printvocode();
test.cpp
#include "test.h"
void printvocode()
{
cout << "Hello vscode" << endl;
}
这时就需要将test的h文件和cpp文件添加到tasks.json中
"args": [
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}/src/*.cpp",
"${workspaceFolder}/src/test/*.cpp","-o",
"${workspaceFolder}/bin/${fileBasenameNoExtension}","-I${workspaceFolder}/src/test",
],
配置c_cpp_properties.json文件
完成以上步骤之后如果想直接使用#include“test.h”还需要配置c_cpp_properties.json文件
1、按F1,输入C/C++: Edit Configurations (UI)找到包含路径添加
2、在左边的.vscode中就会出现一个c_cpp_properties.json文件 ,点击c_cpp_properties.json文件文件,在"includePath"中添加test文件夹的路径
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/src/test"
],
完成以上部分就可以在main函数中引用运行即可
构建cmake项目
根据当前的文件夹,这是相当于三层的cmake ,在根目录建立一个CMakeLists.txt,在src文件夹和main函数同路径建立一个CMakeLists.txt,在src文件夹的test文件夹中建立一个CMakeLists.txt(每一个src文件夹中的文件夹都要有一个CMakeLists.txt)
注意CMakeLists大小写不能出错
根目录的CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required(VERSION 3.10)# 项目信息
project(mylib
VERSION 1.0
DESCRIPTION "A simple example"
LANGUAGES CXX
)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)# 定义通用的输出目录变量,便于统一管理和维护
set(OUTPUT_DIR ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/lib)# 根据不同平台设置可执行文件输出路径(Windows 下特殊处理)
if(WIN32)#windows系统
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) # 可执行文件的输出路径
else()
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) # 可执行文件的输出路径
endif()# 设置动态库和静态库的输出路径
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib) # 动态库的输出路径
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib) # 静态库的输出路径#变量设置
set(test_Dir ${CMAKE_CURRENT_SOURCE_DIR}/src/test) # test头文件路径#添加子目录
add_subdirectory(src)main
main函数同路径的CMakeLists.txt
# 子目录信息
project(main)add_executable(${PROJECT_NAME} main.cpp) # 生成可执行文件 工程名称
# 添加头文件
target_include_directories(${PROJECT_NAME}
PUBLIC #public方式
${test_Dir}
)# 链接动态库
target_link_libraries(${PROJECT_NAME}
PUBLIC
test
)#添加子目录
add_subdirectory(test)
第三层的CMakeLists.txt
project(test)
add_library(
${PROJECT_NAME}
SHARED
test.cpp
)
cmake文件生成
完成CMakeLists.txt之后,在终端输入以下命令没有报错即成功。
cd build
cmake ..
make
最后生成的可执行文件在bin文件夹下,输入以下命令即可执行。
./../bin/main