【发布时间】:2021-04-10 14:16:01
【问题描述】:
我正在为一个硬件模块开发一个驱动程序,并且我希望在使用 CMake 时使其尽可能便携。是否有实现这一目标的最佳做法?
所有平台和平台相关代码都应使用通用代码。 什么样的目录结构适合这个用例? 如何构建 CMakeLists.txt 文件?
【问题讨论】:
我正在为一个硬件模块开发一个驱动程序,并且我希望在使用 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 相关的代码,或者一旦设置x86,x86 并使用通用代码...@987654329 @command 为你创造奇迹
我不确定您如何处理多重交叉编译中的工具链,但我建议使用应设置 CMAKE_TARGET_PROCESSOR 的 CMake 工具链文件...(请参阅 https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/CrossCompiling)
【讨论】: