在vscode上进行C/C++开发的进阶需求:
1) 编写及调试源码时,可进行断点调试、可跨文件及文件夹进行函数调用。
2) 可生成库及自动提取对应的头文件和库文件。
3) 可基于当前工程资源一键点击验证所提取的库文件的正确性。
4) 可结合find_package实现方便的调用。
对于第一个需求,可参考上篇博客Ubuntu下使用vscode进行C/C++开发:基础篇,完成代码的开发及测试,本章将主要记录后两个需求的实现:生成及提取库文件并基于当前项目资源对库进行验证。这里将结合CMake实现,具体步骤如下:
1. 配置CMake文件。
这里实现了:
1)将头文件和库文件提取到了指定的路径(CMAKE_INSTALL_PREFIX)。
2)生成了相应的xxxCofig.cmake文件,后续可以结合find_package对该库实现简便的调用。
具体CmakeLists.txt如下,注意:在使用时,根据自己的项目进行路径、工程名等的修改。
cmake_minimum_required(VERSION 3.2)
project(test_debug_2)
SET(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}/install)
aux_source_directory(./src test_SRCS)
add_library(${PROJECT_NAME} ${test_SRCS})
target_include_directories (${PROJECT_NAME} PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}
RUNTIME
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT ${PROJECT_NAME}_Runtime
LIBRARY
DESTINATION ${CMAKE_INSTALL_LIBDIR}
NAMELINK_SKIP
COMPONENT ${PROJECT_NAME}_Runtime
ARCHIVE
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT ${PROJECT_NAME}_Development
)
install (
DIRECTORY ${CMAKE_SOURCE_DIR}/include/
DESTINATION include
FILES_MATCHING PATTERN "*.h")
install(EXPORT ${PROJECT_NAME}
FILE ${PROJECT_NAME}Config.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
在依次进行如下左侧的命令行之后,最终生成了如右侧所示的库文件结构。至此,已可完成库的生成及库文件的提取。
2. 在当前项目上的测试
主要是将需求1中所需要的“头文件和源文件”配置与需求3所需要的“头文件和库”加载区分开来。以tasks.json的方式展开,如下图所示,存在注释【1】和注释【2】相关的冲突:注释【1】及其后两行代码是满足跨文件、文件夹进行函数调用及断点调试时的配置,注释【2】及其后两行代码是则是满足对该工程所生成的库的相应加载及运行测试。正常的编译、运行需要区分两者,并且只需要其中一个有效。
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/usr/bin/g++",
"args"