带有 CMake 的驱动程序的多个交叉编译目标

问题描述

我正在为硬件模块开发驱动程序,我希望在使用 CMake 时尽可能使其具有便携性。是否有实现这一目标的最佳做法?

有一些通用代码应该在所有平台和平台相关代码中使用。 什么目录结构适合这个用例? 如何构建 CMakeLists.txt 文件

解决方法

我建议在你的源目录的根目录中有通用的实现,同时在 arch 目录中有专用的架构细节。然后您可以使用

在根CMakeLists.txt中选择适当的架构相关代码
add_subdirectory( ${PROJECT_SOURCE_DIR}/arch/${CMAKE_TARGET_PROCESSOR} )

示例项目结构:

source/arch/arm/platform_dependent_code.cpp
source/arch/arm/CMakeLists.txt
source/arch/x86/platform_dependent_code.cpp
source/arch/x86/CMakeLists.txt
source/common_code.cpp
source/CMakeLists.txt <-- to contain add_subdirectory( ${PROJECT_SOURCE_DIR}/arch/${CMAKE_TARGET_PROCESSOR} )

一旦 CMAKE_TARGET_PROCESSOR CMake 变量设置为 arm,那么除了通用代码之外,只构建与 arm 相关的代码,或者一旦设置了 x86x86 和通用代码使用... add_subdirectory(...) 命令为你做魔术

我不确定您如何在多个交叉编译中处理工具链,但我建议使用 CMake 工具链文件,其中 CMAKE_TARGET_PROCESSOR 应设置为...(请参阅 https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/CrossCompiling