首页 > 解决方案 > 如何在 CMakeLists.txt 中调用多个 toolchain.cmake 文件

问题描述

我有两个用于不同架构的 toolchain.cmake 文件。有什么方法可以在 CMakeLists.txt 文件中调用它们,或者我必须像往常一样分别调用它们。然后它工作得很好。我的文件,即 toolchain_a.cmake 和 toolchain_b.cmake

我尝试在 if 语句和 OSX_ARCHITECTURES 变量中进行操作,但没有按预期工作。

标签: cmake

解决方案


您可以包含一个添加两个项目CMakeLists.txt的模块。ExternalProject每个工具链一个。

所有这些都可以CMakeLists.txt使用“SuperBuild”范式从一个单一的完成。

简而言之,它的工作原理如下:

cmake_minimum_required(VERSION 3.14)
project(Awesome)
option(Awesome_SUPERBUILD "Cross-compile Awesome for each toolchain" ON)
include(ExternalProject)
if(Awesome_SUPERBUILD)
  ExternalProject_Add(Awesome-ToolchainA
    SOURCE_DIR ${CMAKE_SOURCE_DIR}
    BINARY_DIR ${CMAKE_BINARY_DIR}/ToolchainA-build
    CMAKE_CACHE_ARGS
      -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_SOURCE_DIR}/toolchain_a.cmake
      -DAwesome_SUPERBUILD:BOOL=0
    INSTALL_COMMAND ""
    )
  ExternalProject_Add(Awesome-ToolchainB
    SOURCE_DIR ${CMAKE_SOURCE_DIR}
    BINARY_DIR ${CMAKE_BINARY_DIR}/ToolchainB-build
    CMAKE_CACHE_ARGS
      -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_SOURCE_DIR}/toolchain_b.cmake
      -DAwesome_SUPERBUILD:BOOL=0
    INSTALL_COMMAND ""
    )
  return()
endif()

# Below is the CMake code of the project to cross-compile

推荐阅读