(小记)cmake:五

学习find_package的 config 模式及package configure文件相关知识

find_package 的 config 模式

当CMakeLists.txt中使用find_package命令时,首先启用的是 module 模式:

  • 按照 CMAKE_MODULE_PATH 路径和cmake的安装路径去搜索finder文件 Find<package>.cmake

如果finder未找到,则开始 config 模式:

  • 将在下列路径下查找 配置 文件 <name>Config.cmake 或 <lower-case-name>-config.cmake

<prefix>/

(W)

<prefix>/(cmake|CMake)/

(W)

<prefix>/<name>*/

(W)

<prefix>/<name>*/(cmake|CMake)/

(W)

<prefix>/(share|lib)/cmake/<name>*/

(U)

<prefix>/(share|lib)/<name>*/

(U)

<prefix>/(share|lib)/<name>*/(cmake|CMake)/

(U)

  • find_package 参数及规则见manual

<name>Config.cmake

该文件至少需提供头文件路径和库文件信息。比如 ApiExtractorConfig.cmake 在Windows下一个例子:

# - try to find APIEXTRACTOR
#  APIEXTRACTOR_INCLUDE_DIR   - Directories to include to use APIEXTRACTOR
#  APIEXTRACTOR_LIBRARIES     - Files to link against to use APIEXTRACTOR

SET(APIEXTRACTOR_INCLUDE_DIR "D:/shiboken/dist/include/apiextractor")
if(MSVC)
    SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/lib/apiextractor.lib")
elseif(WIN32)
    SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/bin/apiextractor.dll")
else()
    SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/lib/apiextractor.dll")
endif()

该文件是通过 configure_file 机制生成的,我们看看 ApiExtractorConfig.cmake.in 文件:

SET(APIEXTRACTOR_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include/apiextractor@apiextractor_SUFFIX@")
if(MSVC)
    SET(APIEXTRACTOR_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@.lib")
elseif(WIN32)
    SET(APIEXTRACTOR_LIBRARY "@CMAKE_INSTALL_PREFIX@/bin/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
else()
    SET(APIEXTRACTOR_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
endif()

对应的命令(变量的定义略过)

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ApiExtractorConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/ApiExtractorConfig.cmake" @ONLY)

<name>ConfigVersion.cmake

该文件用来比对版本是否匹配,看看ApiExtractorConfigVersion.cmake.in 的内容:

set(PACKAGE_VERSION @apiextractor_VERSION@)

if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
   set(PACKAGE_VERSION_COMPATIBLE FALSE)
else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
   set(PACKAGE_VERSION_COMPATIBLE TRUE)
   if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
      set(PACKAGE_VERSION_EXACT TRUE)
   endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )

一般提供设置下面的变量

PACKAGE_VERSION

完整的版本字符串

PACKAGE_VERSION_EXACT

如果完全匹配为真

PACKAGE_VERSION_COMPATIBLE

如果兼容为真

PACKAGE_VERSION_UNSUITABLE

如果不可用为真

find_package进而根据这些设置

<package>_VERSION

full provided version string

<package>_VERSION_MAJOR

major version if provided, else 0

<package>_VERSION_MINOR

minor version if provided, else 0

<package>_VERSION_PATCH

patch version if provided, else 0

<package>_VERSION_TWEAK

tweak version if provided, else 0

参考

 

转载于:https://my.oschina.net/chaenomeles/blog/908893

<think>好的,我现在需要帮助用户在VSCode中正确设置CMake路径。根据用户提供的引用内容,我需要先整理出具体的步骤。 首先,引用[1]提到需要从CMake官网下载二进制包,而不是源代码。用户下载后解压,然后将bin目录添加到系统环境变量。这可能涉及到如何找到环境变量设置的地方,比如在Windows系统中是通过系统属性里的高级设置。这部分需要详细说明,确保用户能正确添加路径。 接下来,引用[2]说明在VSCode中通过命令面板执行CMake快速入门,生成相关文件。不过用户的问题是关于路径配置,可能需要检查CMake在VSCode中的扩展设置是否正确指向了CMake.exe的位置。例如,安装CMake Tools扩展后,在设置里指定CMake路径,或者在用户设置中修改cmake.cmakePath的值。 另外,引用[3]提到CMake是跨平台的构建系统,用户可能在Linux或macOS上操作,但根据引用内容中的示例,可能用户使用的是Windows。不过还是需要考虑不同系统的路径差异,比如在Linux下可能需要通过命令行安装或源码编译,但用户已经下载了二进制包,所以重点应在环境变量和VSCode配置上。 用户可能遇到的常见问题包括:环境变量未正确设置导致命令行无法识别cmake命令,或者VSCode的CMake扩展未找到CMake路径。需要分步骤指导用户检查这两部分。例如,首先在终端输入cmake --version确认是否安装成功,如果失败,说明环境变量有问题。然后在VSCode中检查CMake Tools的配置,确保路径正确。 最后,生成相关问题时要围绕CMake配置、环境变量、VSCode扩展使用等方面,帮助用户进一步解决可能遇到的问题。</think>### 在 VSCode 中设置 CMake 路径的步骤 #### 1. **下载并安装 CMake** - 从 [CMake官网](https://cmake.org/download/) 下载预编译的二进制包(选择 `Windows x64 ZIP` 或其他对应系统的版本)[^1]。 - 解压到指定目录(例如 `D:\CMake`),确保解压后的目录包含 `bin` 文件夹,其中包含 `cmake.exe`。 #### 2. **添加 CMake 到系统环境变量** - 将 CMake 的 `bin` 目录(例如 `D:\CMake\bin`)添加到系统环境变量 `PATH` 中: - Windows: 打开「系统属性」→「高级」→「环境变量」→ 编辑「Path」→ 添加 CMake 的 `bin` 路径。 - Linux/macOS: 在终端中编辑 `~/.bashrc` 或 `~/.zshrc`,添加 `export PATH="/path/to/cmake/bin:$PATH"`,然后运行 `source ~/.bashrc`。 #### 3. **验证 CMake 安装** - 打开终端或命令提示符,输入: ```bash cmake --version ``` 若显示版本信息(例如 `CMake 3.28.3`),则安装成功。 #### 4. **在 VSCode 中配置 CMake 路径** - **方法一(推荐):通过 CMake Tools 扩展** 1. 安装 [CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) 扩展。 2. 按下 `Ctrl+Shift+P` 打开命令面板,输入 `CMake: Scan for Kits`,等待自动检测到 CMake。 3. 若未自动检测到,手动配置: - 打开 VSCode 设置(`Ctrl+,`),搜索 `Cmake: Cmake Path`。 - 输入 CMake 可执行文件的完整路径(例如 `D:\CMake\bin\cmake.exe`)[^2]。 - **方法二:通过用户设置文件** 1. 打开 `settings.json`(命令面板输入 `Preferences: Open User Settings (JSON)`)。 2. 添加以下配置: ```json { "cmake.cmakePath": "D:\\CMake\\bin\\cmake.exe" } ``` #### 5. **测试 CMake 项目** - 新建文件夹并用 VSCode 打开,运行 `CMake: Quick Start` 生成项目模板。 - 编写代码后,使用 `CMake: Build` 编译项目。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值