Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用CMake的驱动程序的多个交叉编译目标_C++_Cmake_Driver_Firmware - Fatal编程技术网

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

C++ 使用CMake的驱动程序的多个交叉编译目标,c++,cmake,driver,firmware,C++,Cmake,Driver,Firmware,我正在为一个硬件模块开发一个驱动程序,我希望在使用CMake时使其尽可能便携。是否有实现这一目标的最佳实践 所有平台和平台相关代码中都应该使用通用代码。 什么目录结构适合这个用例? 如何构造CMakeLists.txt文件?我建议在源目录的根目录中使用通用实现,同时在arch目录中使用专用的体系结构细节。然后,您可以在rootCMakeLists.txt中使用 add_subdirectory( ${PROJECT_SOURCE_DIR}/arch/${CMAKE_TARGET_PROCESSO

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

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

我建议在源目录的根目录中使用通用实现,同时在arch目录中使用专用的体系结构细节。然后,您可以在root
CMakeLists.txt
中使用

add_subdirectory( ${PROJECT_SOURCE_DIR}/arch/${CMAKE_TARGET_PROCESSOR} )
Samle项目结构:

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} )
source/arch/arm/platform\u dependent\u code.cpp
source/arch/arm/CMakeLists.txt
source/arch/x86/platform_dependent_code.cpp
source/arch/x86/CMakeLists.txt
源代码/通用代码.cpp

source/CMakeLists.txt谢谢,这确实很清楚目录结构。我遇到了ExternalProject\u Add,它可以让我直接提供CMAKE\u工具链文件,从而为每个拱门生成一个构建,你认为这可以很好地工作吗?我不知道,缺乏经验。我详细描述的解决方案就是我在项目中使用的解决方案,我发现它非常简单,易于维护。它还有一个优点,您不必在源代码中处理arch管理,只需在CMake中处理。如果您在arch cmakelists.txt中正确设置了include路径,并且在所有平台中具有相同的头名称,那么您只需包含来自arch的头文件……我尝试了您的解决方案,它与顶级Makefile结合使用,可以用于为不同的目标设置工具链文件,效果非常好。非常感谢您的解决方案。