vcpkg+cmake+vscode环境搭建

您所在的位置:网站首页 locate命令在什么包中 vcpkg+cmake+vscode环境搭建

vcpkg+cmake+vscode环境搭建

2023-04-29 10:07| 来源: 网络整理| 查看: 265

vcpkg+cmake+vscode环境搭建 Author: Lovoski Date: 四月 20, 2023  Category: Environment

因为需要用到的工具大多只有windows平台的,我的代码环境只有少量运行在wsl2上,大部分需要在windows编译运行。为了维护c++用到的大量第三方库,我用vcpkg和cmake搭建出c++的编译工具链。我下面直接用Q&A的方式快速表明解决方案。

vcpkg 国内下载源很慢,镜像网站资源不全怎么处理? 可以参考这里的解决方案,通过再环境变量里面添加一项1X_VCPKG_ASSET_SOURCES 让这项的值为1x-azurl,http://106.15.181.5/ 这样可以让大部分的资源都从镜像网站下载,但是有的镜像网站值镜像了部分常用的包,还有的仍然是从github上下载的。 一个办法是git加上代理,通过命令12git config --global http.proxy ":"git config --global https.proxy ":" 让git发送http和https请求的时候走代理端口,clash的默认端口号是7890。 另外一个比较痛苦的方法是手动下载需要的包,按照vcpkg下载时的一则信息1... https://... -> ... 手动去前面的网址下载需要的包,下载完后重命名为箭头后面的名字,放到vcpkg根目录下面的download文件夹里面,下一次重新运行vcpkg install ...的时候会找到这个下载好的文件。 libigl 的一些组件 [cgal, glfw, imgui] 很难完整下载下来安装 如果给git加上代理也没有作用,可是采用下面的办法。 因为这种小组件依赖了一些找不到下载地址的submodule,但是这些组件的源代码都在libigl的源码包里面,直接把libigl的源代码覆盖到vcpkg/installed/x64-windows/include里面去,下一次重新安装的时候会提示覆盖已有文件,然后能成功编译了。 vscode 怎么结合 cmake 编译调试程序? vscode有一个微软的官方插件CMake Tools,集成了cmake的功能,确保安装了cmake并添加到环境变量之后可以直接用ctrl+shift+p调出命令盘,输入cmake:,接下来选择其中的configure,build就可以了。下面是vscode调出的操作盘。 如果需要给程序添加断点,逐步debug调试,可以在当前的项目根目录的.vscode文件夹里面创建或者修改settings.json为下面的样式12345678{ "cmake.configureSettings": { "CMAKE_TOOLCHAIN_FILE": "...\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake" }, "cmake.debugConfig": { "args": ["a", "b", "c"] }} 上面的配置文件指定了cmake编译使用vcpkg的工具链,路径不全为本机上vcpkg的安装位置下的scripts/buildsystems/vcpkg.cmake文件。下面的是在debug的时候需要给二进制文件传递的命令行参数,上面的参数等价于在命令行里面执行1.\some_binary.exe a b c 我该怎么组织一个自己的 cmake 项目? 首先要确认需要的项目的大致结构,比较常见的是这样的 root folder lib_a lib_b sub folder exe_a lib_c exe_b 在上面的例子中,我们假设exe_a是一个用于测试的可执行程序,依赖于lib_a,lib_a和lib_b是最基本的库文件,lib_c是一个依赖于lib_a的库文件,exe_b是我们的主程序,主程序同时依赖于lib_a,lib_b和lib_c。 我们首先要熟悉库文件和可执行文件的CMakeLists.txt的写法下面是一个库文件的CMakeLists.txt的例子123456789101112131415161718192021222324# 要求 cmake 的最低版本cmake_minimum_required(VERSION 3.20)# 这个子程序的项目名称# 在这里会生成一个名为 Model3D.lib 的库文件project(Model3D)set(CMAKE_CXX_STANDARD 17)# 设置产生二进制文件的位置# 这里需要提一下,PROJECT_SOURCE_DIR是不会随着当前的项目变化的# 在整个项目里面不管有多少子项目都是同一个宏set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build)# 把当前的相对路径下的 src 文件夹下的所有 .cpp 文件记录到变量 SRC_FILES 里面file(GLOB SRC_FILES src/*.cpp)# 指定当前的 include 路径为相对路径下的 include 文件夹include_directories(include)# 用于找到需要的第三方依赖库find_package(CGAL CONFIG REQUIRED)find_package(Eigen3 CONFIG REQUIRED NO_MODULE)find_package(libigl CONFIG REQUIRED)# 生成库文件add_library(${PROJECT_NAME} STATIC ${SRC_FILES})# 为生成的库文件链接第三方库target_link_libraries(${PROJECT_NAME} PRIVATE CGAL::CGAL Eigen3::Eigen igl::core igl::common) 下面的是一个可执行文件的CMakeLists.txt的例子1234567891011121314151617181920212223242526272829303132333435363738cmake_minimum_required(VERSION 3.10)project(CoveringForGeodesic)set(CMAKE_CXX_STANDARD 17)# 设置是否要编译下面的这些子项目option(BUILD_MODEL3D "Build subproject model3d statically" ON)option(BUILD_GEODESIC "Build subproject geodesic statically" ON)option(BUILD_RIDGE_STRUCTURE "Build subproject ridge_structure statically" ON)file(GLOB MAIN_SRC_FILES *.cpp *.hpp)# 这里还要添加自己依赖的子项目库的头文件include_directories( ${CMAKE_SOURCE_DIR}/Geodesic/include ${CMAKE_SOURCE_DIR}/Model3D/include ${CMAKE_SOURCE_DIR}/CommonAlgorithms ${CMAKE_SOURCE_DIR}/RidgeStructure/include)link_directories(${PROJECT_SOURCE_DIR}/build)find_package(Eigen3 CONFIG REQUIRED NO_MODULE)find_package(libigl CONFIG REQUIRED)if (${BUILD_MODEL3D}) add_subdirectory(Model3D)endif()if (${BUILD_GEODESIC}) add_subdirectory(Geodesic)endif()if (${BUILD_RIDGE_STRUCTURE}) add_subdirectory(RidgeStructure)endif()# 生成二进制文件add_executable(${PROJECT_NAME} ${MAIN_SRC_FILES})# 链接库文件# 这里直接用子项目的 PROJECT_NAME 作为链接的标识target_link_libraries(${PROJECT_NAME} PRIVATE Eigen3::Eigen igl::core igl::common Model3D Geodesic RidgeStructure) 从上面的两个例子已经可以看出,如果我需要把自己写的本地库项目连接到项目内的可执行文件里,需要把库项目的头文件用include_directories设置到include路径上,在之后通过target_link_libraries用库项目的PROJECT_NAME直接链接到可执行文件。 find_package 做了些什么?

Author: Lovoski

License: Copyright (c) 2019 CC-BY-NC-4.0 LICENSE

Tag(s): # environment back · home 矢量绘图软件 IPE 面积累加方法求脊线结构


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3