You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于目标架构通过CMake Find Package选择对应版本的Googletest

基于架构自动选择GoogleTest的CMake配置方案

可以通过条件判断目标编译环境,结合find_package的路径参数,实现根据x86_64本地编译或Xilinx交叉编译场景自动匹配对应版本的GoogleTest。

核心思路

利用CMake内置变量区分编译环境:

  • 本地x86_64编译时,CMAKE_SYSTEM_NAME默认值为Linux
  • 交叉编译时,你的工具链已设置CMAKE_SYSTEM_NAME为Generic,且编译器前缀为aarch64-linux-gnu-

通过这一差异分路径执行find_package,确保匹配对应架构的预编译GoogleTest。

具体CMake代码实现

# 重置GTest查找状态
set(GTEST_FOUND OFF)

# 判断编译环境
if(CMAKE_SYSTEM_NAME STREQUAL "Generic")
    # 交叉编译场景:指定交叉编译版GoogleTest的安装根路径
    set(CROSS_GTEST_ROOT "/my/favorite/path")
    # 查找交叉编译版的GTest配置文件(覆盖默认路径)
    find_package(GTest REQUIRED
        PATHS "${CROSS_GTEST_ROOT}/lib/cmake/GTest"
              "${CROSS_GTEST_ROOT}/share/cmake/GTest"
        NO_DEFAULT_PATH
    )
else()
    # 本地x86_64场景:使用系统默认路径查找(优先/usr/local)
    find_package(GTest REQUIRED)
endif()

# 将GTest链接到你的测试目标
target_link_libraries(your_test_target PRIVATE GTest::GTest GTest::Main)

关键细节说明

  • NO_DEFAULT_PATH:交叉编译时必须添加,防止CMake误找到本地x86_64版本的GoogleTest配置
  • GoogleTest安装后的CMake配置文件通常位于${INSTALL_PREFIX}/lib/cmake/GTest或${INSTALL_PREFIX}/share/cmake/GTest,需确保交叉编译版的GTest确实安装到了/my/favorite/path下的对应目录
  • 若偏好通过编译器前缀判断环境,可替换条件为:
    if(CMAKE_C_COMPILER MATCHES "aarch64-linux-gnu-")
        # 交叉编译逻辑
    else()
        # 本地编译逻辑
    endif()
    

验证方式

  • 本地编译:直接执行cmake ..,查看输出日志确认GTest路径为/usr/local相关目录
  • 交叉编译:先source Vitis的bash脚本配置工具链,再执行cmake .. -DCMAKE_TOOLCHAIN_FILE=your_toolchain.cmake,检查输出日志确认GTest路径指向/my/favorite/path

内容的提问来源于stack exchange,提问作者Alex Baum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:16:14