使用 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)
我正在为一个硬件模块开发一个驱动程序,我想在使用 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)