vscode工具链
目录
安装必要软件
clang clangd clang-tidy clang-format lldb
cmake ninja-build
vscode插件
clangd CodeLLDB
若有头文件找不到等clangd相关的补全提示问题,可通过安装最新版clangd解决 https://clangd.llvm.org/installation.html
cmake项目管理
cmake+ninja+lldb
https://github.com/bing-dong/dot_vscode
注意事项
使用clangd自动补全时,需要compile_command.json文件
-
使用cmake管理的工程只需要在CMakeLists.txt中添加
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)即可 -
而使用make管理的工程需要通过compiledb来手动生成
pip install compiledb
# 在项目根目录下,生成JSON文件,但不编译项目
compiledb -n make
cmake语法
示例一
# 宏定义
add_compile_definitions(WITH_OPENSSL)
# generating compile_command.json used by clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
# 项目下的头文件添加
include_directories(./include)
include_directories(./include/ffmpeg)
# 自动查找源文件
aux_source_directory(./src DIR_SRCS)
# 找系统库(头文件 和 链接库)
find_package(OpenSSL REQUIRED)
if( OpenSSL_FOUND )
# 找到后将头文件目录包含
include_directories(${OPENSSL_INCLUDE_DIRS})
message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")
else()
message(FATAL_ERROR "Can not find OpenSSL")
endif()
# 生成二进制可运行文件
add_executable(onvif main.cpp ${DIR_SRCS})
# 寻找项目目录下的链接库
find_library(FFMPEG_LIBRARY avcodec avdevice avformat avutil swresample swscale HINTS ${PROJECT_SOURCE_DIR}/lib/ffmpeg)
# 添加链接库
target_link_libraries(onvif ${OPENSSL_LIBRARIES} ${FFMPEG_LIBRARY})
示例二
cmake_minimum_required(VERSION 3.0.0)
project(onvif VERSION 0.1.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
#set(CMAKE_CXX_FLAGS "-Wall -g")
# generating compile_command.json used by clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
# define preprocessor macro
add_compile_definitions(WITH_OPENSSL WITH_DOM)
# for onvif auth
find_package(OpenSSL REQUIRED)
if( OpenSSL_FOUND )
include_directories(${OPENSSL_INCLUDE_DIRS})
message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")
else()
message(FATAL_ERROR "Can not find OpenSSL")
endif()
find_package(OpenCV REQUIRED)
if( OpenCV_FOUND )
include_directories(${OpenCV_INCLUDE_DIRS})
message(STATUS "Using OpenCV ${OPENCV_VERSION}")
else()
message(FATAL_ERROR "Can not find OpenCV")
endif()
# header & source
include_directories(./include)
include_directories(./include/ffmpeg)
aux_source_directory(./src DIR_SRCS)
# aux_source_directory(./src/custom DIR_SRCS_CUSTOM)
# add_executable(onvif main.cpp ${DIR_SRCS} ${DIR_SRCS_CUSTOM})
# include_directories(${PROJECT_SOURCE_DIR}/include/custom)
# exe
add_executable(onvif main.cpp ${DIR_SRCS})
# lib
find_library(FFMPEG_LIBRARY avcodec avdevice avformat avutil swresample swscale HINTS ${PROJECT_SOURCE_DIR}/lib/ffmpeg)
target_link_libraries(onvif ${OPENSSL_LIBRARIES} ${OpenCV_LIBRARIES} ${FFMPEG_LIBRARY})