使用 CMake 的驱动程序的多个交叉编译目标

Multiple cross-compilation targets for drivers with CMake

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

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

我建议在您的源目录的根目录中有共同的实现,同时在 arch 目录中有专门的体系结构细节。然后你可以 select 在根 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 相关的代码被构建在通用代码之外,或者一旦 x86 被设置,x86 和使用通用代码...add_subdirectory(...) 命令为您带来神奇效果

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