cmake - 如何在 CMakeLists.txt 中调用多个 toolchain.cmake 文件
问题描述
我有两个用于不同架构的 toolchain.cmake 文件。有什么方法可以在 CMakeLists.txt 文件中调用它们,或者我必须像往常一样分别调用它们。然后它工作得很好。我的文件,即 toolchain_a.cmake 和 toolchain_b.cmake
我尝试在 if 语句和 OSX_ARCHITECTURES 变量中进行操作,但没有按预期工作。
解决方案
您可以包含一个添加两个项目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